黑马程序员技术交流社区

标题: C语言结构体总结 [打印本页]

作者: 后知后觉4778    时间: 2015-12-22 22:07
标题: C语言结构体总结
1,结构体是什么
       结构体是组合数据类型的一种,其成员类型可以是相互关联的基本数据类型也可以是结构体  类型
2,使用场合
       当要处理大量有关联的不同数据类型的时候,例如一个学生的信息,有学号(int),姓名(char *),年龄(int)等信息,就可以使用结构体,大大提高效率
3,怎么用
         (1)声明或者说定义结构体类型
                与基本数据变量的定义不同,由于系统已经知道基本数据类型的结构,类型名 变量名
        就可以搞定,但是结构体是用户自己定义的,
         首先要声明或定义结构体类型,告诉系统有这个类型,是怎么样的,定义结构体类型的方式为:  使用关键字struct 后面跟上类型名
           struct 类型名
           {
                        成员列表;//成员类表就是成员的  类型  名字;类型可以是基本数据类型,也可以是结构体类型
           }
       
          如:struct Student
              {
                   int    num;
                   char   name[20];
                   char   sex;
                   int    age;
                   char   address[20];
              }; //这样就定义了一个结构体类型Student,内部包含学生的各种信息
       
        (2)定义结构体变量
             
        在声明结构体类型(相当于一个模板)后就可以定义结构体变量了,主要有三种方式:
              1> >  声明结构体类型和定义结构体变量分开(最常用和灵活的方式)
              struct Student
              {
                   int    num;
                   char   name[20];
                   char   sex;
                   int    age;
                   char   address[20];
               };//在声明了结构体类型struct Student后,定义结构体变量
               
              struct Student studnet1,student2;//定义了两个结构体变量student1和student2
            
             2>>  在声明结构体类型的同时定义结构体变量。如:
                   struct Student
              {
                   int    num;
                   char   name[20];
                   char   sex;
                   int    age;
                   char   address[20];
                        }studnet1,student2;
                3>> 在声明结构体类型的同时定义结构体变量(匿名对象),但是没有类型名 如:
                   struct
              {
                   int    num;
                   char   name[20];
                   char   sex;
                   int    age;
                   char   address[20];
                        }studnet3;
                   
4,使用注意
         1>>   结构体类型和结构体变量是两个不同的概念,结构体类型相当于一个模板,在编译时是
                    不分配存储空间的,只对定义的.
                 结构体变量按照模板的定义分配相应的存储空间,这样的话只能对结构体变量赋值,存
                 取和运算,而不能对结构体类型进行赋值,存取和运算
        2>> 同一作用域内不可重复定义结构体类型和结构体变量,匿名类型对象除外
        3>>  可在函数内也可在函数外,效果及用法类似于局部变量和全局变量,也可以嵌套定义
        4>>  可在函数内外定义同一个结构体类型,同样遵循就近原则
        5>> 只有在定义结构体变量的同时才能批量初始化,定义结构体变量后,只能一个一个的初                  
                  始化
5,与数组的区别
        1>> 结构体可以存不同类型的元素,而数组只能存同一类型
        2>> 结构体类型需要我们自已定义.数组是用别的类型加[元素个数]
        3>> 结构体内存分配方式很特别,使用对齐原则,不一定是所有元素的字节数和,而数组一定是 所   
                有元素的字节数和.
        4>>  结构体指针可以指针名->结构体元素名(取元素);数组不行
6,结构体数组
           结构体数组本质是数组,数组元素是同一类型的结构体变量,例如定义一个Student结构体
        数组用于存放一个班级所有学生的信息
7,结构体指针
            是指向结构体变量的指针,用法如下
        struct Person
        {
                 char *name;
                int age;
                }; // 定义结构体类型
               
                struct Person per={"wangjintaof",2};//定义结构体变量的同时批量初始化
        struct Person *p=&per; //定义指向结构体类型的指针,并初始化,使其指向per
        然后就可以用指针引用和访问结构体变量的元素了,具体三种方式如下
                 1>>>. P->name = "wangjintao";//给name成员变量赋值
                 2>>>. (*p).name = "wangjitnao";//给name成员变量赋值、
                3>>>.    Per.name="wangjitnao";



作者: wkop    时间: 2015-12-22 22:52
很全面!
作者: 956251361    时间: 2015-12-25 18:37
总结的很好,加深学习一下




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2