C语言基础-结构体22

来源:互联网 发布:java poi excel 换行 编辑:程序博客网 时间:2024/06/05 08:23

1 .结构体的类型说明

        struct 新类型名称

        {

            //在这里面写上,你创建的新类型是由哪些变量联合而成的.

            数据类型1小变量名称1;

            数据类型2小变量名称2;

            数据类型3小变量名称3;

        };

        struct Student

        {

            char *name;

            int age;

            int score;

            float height;

        };

        代表新创建了1个数据类型.这个数据类型的名称叫做 struct Student.

        这个新的类型是由 1char* int int float的小变量联合而成的.

2. 如何声明结构体类型的变量.

 

    1).我们使用结构体仅仅是创建了1个新的类型而已,并没有变量.

        结构体的作用:是在指定新的数据类型是由哪些小变量组合而成的.

 

    2).声明结构体类型的变量.

      

        语法格式:

        struct 新类型名称变量名;

        struct Student stu;

        代表声明了1 struct Student类型的变量.变量名字叫做stu

        这个时候, stu才是1个变量.才会在内存中申请空间.

        这个变量中,是由这个新的结构体类型规定的小变量组合而成的.

        这个结构体大变量是由结构体类型规定的小变量组合而成的.

 

 

    3).结构体变量的类型:

        struct Student stu;

        这个时候stu结构结构体变量的类型是struct Student.而不是Student


3.结构体变量的初始化.

 

   1).先声明变量,再使用点11个的为成员赋值.


    2).在声明结构体变量的同时,就为结构体变量的成员初始化. *******

 

        struct Student xiaoHua = {"小花",17,89};

 

    3).在声明结构体变量的同时,按顺序初始化部分成员

 

        struct Student liLei = {"李雷"};


    4).指定成员的初始化

        struct Student jim = {.name = "吉姆",.age = 17, .score = 100};


     声明1个结构体变量,如果没有这个结构体变量的成员赋值.那么成员是有值是垃圾值.

 

    只要在声明结构体变量的同时.只要初始化1个成员,其他的成员就会被自动的初始化为0.


4.结构体类型的作用域

 

   如果结构体类型是定义在函数的内部的,那么这个结构体类型只能在这个函数的内部使用.

   如果我们希望这个结构体类型可以用在所有的函数中.

   那么就把这个结构体类型定义在函数的外面.定义在最顶上.    

   一般情况下,我们的结构体类型都是定义在函数的外面,以让所有的函数来使用.

5. 结构体变量之间的相互赋值.

 

    1).相同结构体类型的变量之间绝对是可以相互赋值的.

 

    2).结构体变量之间的赋值原理

        将源结构体变量中的每一个成员的值 拷贝一份 赋值给目标结构体变量中对应的成员.

    3).结构体变量之间赋值 是值传递.

6.结构体数组

   struct 结构体类型名称数组名称[数组长度];

 1).先声明结构体数组,然后用下标11个元素的赋值.

 

        注意:当我们为结构体数组的元素赋值的时候.如果直接使用大括弧来初始化.

             就必须要前面加1个小括弧,来告诉编译器我们的给的数据类型.

 

         struct Student students[5];

         students[0] =(struct Student){"小明1",16,56};

         students[1] =(struct Student){"小明2",18,100};

         students[2] =(struct Student){"小明3",19,10};

         students[3] =(struct Student){"小明4",21,100};

         students[4] =(struct Student){"小明5",13,3};

 

    2).在声明结构体数组的同时,就为所有的元素初始化.

         struct Student students[5] =

         {

             {"小明1",16,56},

             {"小明2",18,100},

             {"小明3",19,10},

             {"小明4",21,100},

             {"小明5",13,3}

         };

 

 3. 结构体数组的长度计算.

 

    1).先使用sizeof计算出数组占用的总的字节数.


    2).使用总字节数 除以 1个元素占用的字节数.

 

    int len =   sizeof(students) / sizeof(struct Student);


7.结构体指针

   

       struct 结构体类型名称*指针名;

        struct Student* pStu;

        声明了1pStu指针变量.这个指针变量的类型是struct Student*.

        这个指针就只能指向struct Student类型的变量.

       初始化:

        a. 取出结构体变量的地址.

           使用取地址运算符

           就可以取出结构体变量的地址.

        b. 将地址赋值给指针变量.

           struct Student xiaoMing = {"小明",18,100};

           struct Student* pStu =  &xiaoMing;

      如何使用指向结构体变量的指针来间接的访问这个结构体变量呢?

        a. (*结构体指针名).成员.

           (*pStu).age = 18;

        b. 使用箭头 ->来访问.

           pStu->age = 19; 代表把19赋值给pStu指针指向的变量的age成员.

8.结构体和函数

    

 1.结构体作为函数的参数

 

    1).结构体是我们自定义的一种数据类型,也是一种数据类型所以当然可以作为函数的参数.

 

    2).结构体作为参数传值 值传递.

 

    3).如果你就是希望函数的内部可以修改实参结构体变量的值,那么就是要指针.

 

 2.结构体作为函数的返回值.

 

    1).结构体类型完全可以作为函数的返回值.

 

    2).在返回的时候 直接将这个结构体变量的值返回即可.

 

    3).如果你要返回结构体变量的地址.那么就要把这个结构体变量创建在堆区.



注意

 

    1).一定要先使用结构体定义新的类型.

        然后才可以根据这个类型声明这个类型的变量.

 

    

    2).结构体变量是1个变量.所以可以批量声明.

 

        struct Student xiaoHua,jim,meimei,lilei;

 

    3).结构体的名称的的命名规范,要求每一个单词的首字母大写.

 

    4).我们之前,是先声明结构体类型,再根据这个类型声明变量.

        实际上这两步可以简化为1个步骤.

 

         struct Computer

         {

            char *cpuModel;

            int memSize;

            char *brand;

         } iMac,lenvol,hp,dell;


        声明结构体类型的同时,声明结构体类型的变量.

 

    5). 匿名结构体

 

        就是这个结构体类型没有名称.


         struct

         {

             char *barnd;

             char *color;

             int price;

         }fengshan1;

 

         a. 只能在声明结构体的同时就创建变量.

         b. 不能单独的声明这个结构体类型的变量.


原创粉丝点击