zoukankan      html  css  js  c++  java
  • 012C语言

    回顾:

    1.字符串数组
    char *pa[5];
    pa[0] -->一个字符串
    可以指向 5个字符串

    char a[5][10]; 保存一个字符串
    用字符的二维数组保存字符串数组

              char **ppa;

    2. 字符串数组的案例<带参数的main>
    char *argv[] 命令行传入的参数内容
    一个字符串就是一个参数
    int argc 记录上面数组的元素个数


    3. 程序的编译过程,--> 预处理
    预处理掉 源代码中所有#开始的语句和注释

    宏 #define
    宏变量
    宏函数
    内置的宏 __DATE__
                    __TIME__

    条件编译
    #if #else #endif

    #define
    #ifndef #else #endif
    #ifdef #else #endif

    #ifndef //防止头文件交叉引用
    #define

    //头文件的内容
    #endif

    #include
    <>
    "" 查找当前目,在找系统目录
    ----------------

    构建大型程序
    多人参与开发,由多个.c文件,如何将多个.c编译成为一个可执行程序?

    1.将每个.c文件进行独立编译成为.o
             将.c文件关于函数原型的声明及其他公共使用到的声明 放到对应.c文件的头文件中,其他的.c 通过include 将头文件引用,即可对该.c函数的调用.

    static 限制外部.c文件使用
    extern 符号的具有外部链接特性

           2.将所有的.o文件 链接成一个可执行文件

    make 项目编译
    make 在当前目录找 makefile/Makefile 文件

    创建makefile 文件,编写编译规则
    一条规则
    目标:该目标依赖的文件
    [tab]用依赖文件生成目标文件的命令

    -------------------------

        自定义数据类型   (int float)

              结构体        

              怎么构造自己的类型

    vim打开多个文件 vim 文件1 文件2  -p

        struct (构造体)

    /*
    * 描述一个学员信息
    */

     //字符串赋值  strcpy
    #include<stdio.h>
    #include <string.h>
    int main(){
        //1.定义student 类型
        struct student{
            char name[20];
            int  score;
            int  age;
        }stu1,stu3;  //声明了2个student 类型的 变量stu2,stu3
        stu1.score = 80;
        //stu1.name = "李辉"; //不可这么赋值  strcpy
        //strcpy("李辉",stu1.name); 不可以
        strcpy(stu1.name,"李辉");
        stu1.age = 18;
        printf("该学员的姓名=%s
    ",stu1.name);
        printf("该学员的成绩=%d
    ",stu1.score);
        printf("该学员的年龄=%d
    ",stu1.age);
        getchar();
        return 0;
    }

     typedef  设定结构体类型的别名

    #include<stdio.h>
    #include <string.h>
    
    int main(){
    #if 0
        //1.定义student 类型
       struct student{
          char name[20];
          int  score;
          int  age;
       }stu2,stu3;  //声明了2个student 类型的 变量stu2,stu3
    #endif
    typedef struct student{  //student 可以省略
          char name[20];
          int  score;
          int  age;
       }Student;   //struct student stu1  ==>Student stu1
    
    
    
       //用student 类型 声明变量stu1
       // struct student stu1; 
       Student stu1; 
    
       //使用结构体 
       //[练习]给该学员 赋值姓名 和年龄 然后打印
       //字符串赋值  strcpy
        stu1.score = 80;
        //stu1.name = "李辉"; //不可这么赋值  strcpy
        //strcpy("李辉",stu1.name); 不可以
        strcpy(stu1.name,"李辉");
        stu1.age = 18;
    
        printf("该学员的姓名=%s
    ",stu1.name);
        printf("该学员的成绩=%d
    ",stu1.score);
        printf("该学员的年龄=%d
    ",stu1.age);
        return 0;
    }
    /*
     * typedef  类型的别名
     */

    typedef int int32

    uint32 //无符号32整型

    typedef unsigned int uint32

    typedef struct {

    }

    #include <stdio.h>
    typedef int   INT;
    typedef unsigned int  uint32 ;
    
    int main(){
    
        INT       i =  0;
        uint32  i32 = 0;
    
        printf("sizeof(INT) = %d
    ",sizeof(INT));
        getchar();
        return 0;
    }
    /*
     *   结构体变量的初始化
    */
    #include <stdio.h>
    int main(){
        typedef struct student{  //student 可以省略
            char name[20];
            int  score;
            int  age;
        }Student;
        Student stu1 ={"李辉",0,80};
        printf("该学员的姓名=%s
    ",stu1.name);
        printf("该学员的成绩=%d
    ",stu1.score);
        printf("该学员的年龄=%d
    ",stu1.age);
        getchar();
        return 0;
    }
    结构体指针
    #include <stdio.h>
    int main(){
        typedef struct student{  //student 可以省略
            char name[20];
            int  score;
            int  age;
        }Student;
        Student stu1 ={"李辉",0,80};
        Student * ps = &stu1; //声明一个结构体指针变量 指向stu1
        ps->score = 90;
        printf("ps->name姓名=%s
    ",ps->name);
        printf("ps->score成绩=%d
    ",ps->score);
        printf("ps->age年龄=%d
    ",ps->age);
        getchar();
        return 0;
    }
     /*
     *   [练习]
     *       声明一个Student 类型 (typedef)
     *       再声明 一个Student 结构体变量 s  指针变量ps   ps指向s
     *       通过ps 对 s变量进行赋值 并打印输出s的内容
     *
     *       sizeof(ps)  结果是多少?
     *       sizeof(s)   结果是多少? 为什么?
     *       name成员将20改为19后
     *       sizeof(s)   是多少?
     */
    #include <stdio.h>
    int main(){
        typedef struct{  //student 可以省略
            char name[19];
            char c1;
            char c2;
            int  score;
            int  age;
        }Student;   //struct student stu1  ==>Student stu1
    
        Student stu1;
        Student * ps = &stu1; //声明一个结构体指针变量 指向stu1
    
    
        printf("sizeof(ps) = %d
    ",sizeof(ps)); //4
        printf("sizeof(stu1) = %d
    ",sizeof(stu1)); //28
    
        printf("sizeof(int) = %d
    ",sizeof(int)); //4
        printf("sizeof(Student) = %d
    ",sizeof(Student)); //28
        getchar();
        return 0;
    }

    sizeof(ps) = 4
    sizeof(stu1) = 32
    sizeof(int) = 4
    sizeof(Student) = 32

    bit对其

     结构体变量字节数=所有成员字节数之和?
     四字节补齐 ==>4的整数倍  
    /*
     *   结构体应用
     *        结构体作为函数的参数, 
     *        值传递,而不是指针,跟基本类型变量一样
     *        跟指针,数组 不一样
     *        如果要修改传入的结构体,应该传指针
     *
     *
     *        结构体作为函数的返回值
     *            跟普通基本类型一样
     *
     */
    #include <stdio.h>
    typedef struct student{  //student 可以省略
        char name[20];
        int  score;
        int  age;
    }Student; 
    void func (Student* s);
    
    int main(){
        Student stu1 ={"李辉",30,30};
        func(&stu1);
        printf("姓名=%s
    ",stu1.name);
        printf("成绩=%d
    ",stu1.score);
        printf("年龄=%d
    ",stu1.age);
    
        getchar();
        return 0;
    }
    void func (Student* s)
    {
        s->age = 18;
    
        //return 0;
    }
    /*
     *   结构体应用
     *        结构体作为函数的参数, 
     *        值传递,而不是指针,跟基本类型变量一样
     *        跟指针,数组 不一样
     *        如果要修改传入的结构体,应该传指针
     *
     *
     *        结构体作为函数的返回值
     *            跟普通基本类型一样
     *
     */
    
    #include<stdio.h>
    #include <string.h>
    
    typedef struct student{  //student 可以省略
         char name[20];
        int  score;
        int  age;
    }Student;   //struct student stu1  ==>Student stu1
    
    #if 0
    void func (Student s);
    void func (Student s)
    {
        s.age = 18;
    
        //return 0;
    }
    
    void func (Student* s);
    void func (Student* s)
    {
        s->age = 18;
    
        //return 0;
    }
    #endif
    #if 0
    Student  func (Student s);
    Student  func (Student s)
    {
        s.age = 18;
        return s;
    }
    #endif
    
    Student*  func (Student s);
    Student*  func (Student s)
    {
        s.age = 18;
        return &s;//不可以返回局部变量的地址
    }
    
    int main(){
    
        //Student stu2 ={0};
        Student stu1 ={"李辉",30,30};
    
        //stu1 = func(stu1);
        Student *ps = func(stu1);
    
        printf("ps->name姓名=%s
    ",ps->name);
        printf("ps->score成绩=%d
    ",ps->score);
        printf("ps->age年龄=%d
    ",ps->age);
    
    #if 0
        printf("姓名=%s
    ",stu1.name);
        printf("成绩=%d
    ",stu1.score);
        printf("年龄=%d
    ",stu1.age);
    
    
        printf("输入姓名:");
        //scanf("%s",stu1.name);
        scanf("%s",ps->name);
    
        printf("输入成绩:");
        //scanf("%d",&(stu1.score));
        scanf("%d",&(ps->score));
    
    
        printf("输入年龄:");
        scanf("%d",&(ps->age));
    
    
        printf("ps->name姓名=%s
    ",ps->name);
        printf("ps->score成绩=%d
    ",ps->score);
        printf("ps->age年龄=%d
    ",ps->age);
    #endif
    
        return 0;
    }

    结构体的数组

    #include<stdio.h>
    #include <string.h>
    
    typedef struct student{  //student 可以省略
        char name[20];
        int  score;
        int  age;
    }Student;   //struct student stu1  ==>Student stu1
    
    
    
    //void func (Student s[],int len);
    void input (Student *s,int len); //跟上面是一样的
    void input (Student* s,int len)
    {
        for(int i = 0;i<len;i++)
        {
            printf("输入姓名:");
            scanf("%s",s[i].name);
    
            printf("输入成绩:");
            scanf("%d",&(s[i].score));
    
    
            printf("输入年龄:");
            scanf("%d",&(s[i].age));
    
        }
    
    
        //return 0;
    }
    
    void output (Student *s,int len); //跟上面是一样的
    void output (Student *s,int len)
    {
        for(int i = 0;i<len;i++)
        {
            printf("第%d个姓名:%s
    ",i+1,s[i].name);
            printf("第%d个成绩:%d
    ",i+1,s[i].score);
            printf("第%d个年龄:%d
    ",i+1,s[i].age);
    
        }
    
        //return 0;
    }
    
    int main(){
    
        Student stu1 ={"李辉",30,30};
    
        Student  s[10];  //声明10个Student 结构体的数组
    
        input(s,3);
    
        output(s,3);
        getchar();
        getchar();
        return 0;
    }
    何所为,不仅仅是一种态度,更是一种艺术!
  • 相关阅读:
    一只iPhone的全球之旅
    iOS开发之在地图上绘制出你运行的轨迹
    iOS开发之一些字符串常用的代码
    json格式化和查看工具
    iOS开发之结合asp.net webservice实现文件上传下载
    更改GROOVE的文件夹位置
    调试Windows Service
    从数据库中获取Insert语句
    iOS开发学习笔记(一)
    《影响力》的影响
  • 原文地址:https://www.cnblogs.com/tanzizheng/p/12910581.html
Copyright © 2011-2022 走看看