A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© snowimba 中级黑马   /  2015-10-12 20:30  /  925 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1、c语言构造类型
        构造数据类型是根据已定义的一个或多个数据类型用构造的方法来定义的。-----数组
        数组是一个典型的构造类型;
        数组类型:
        结构体类型;
        共用体类型;
       
2、结构体:
        结构是一种构造类型,它是由若干成员组成的,每一个成员可以是一个基本数据或者又是一个构造类型。
       
3、结构类型作用:
        传一个结构体比较简单
       
4、定义方法:
        一般形式:
                struct    结构名{
               
                        成员列表
                };
               
5、结构体变量定义方法
        1)先定义结构,然后再定义结构体变量
         struct stu{
                int num;
                int age;
                char name;
            };
                注意:    1)结构体定义完成后,计算机并不会给结构体分配内存空间
                                2)会在定义结构体变量后,分配存储空间;
                               
                                结构体变量定义格式:
                                        struct 结构体名  结构体变量名;
                                        struct stu stu1;这个变量存放学生的学号,年龄,姓名;可以定义多个结构体变量;struct stu stu1,stu2,stu3;
       
        2)定义结构体同时,定义结构体变量
        struct stu{
                int num;
                int age;
                char name;
            } stu1,stu2,stu3;
        用stu结构体定义了三个结构体变量;
       
        3)使用匿名结构体定义结构体变量;
        struct {
                int num;
                int age;
                char name;
            } stu1,stu2,stu3;  匿名结构体只能这么定义;
       
        分全局结构体,和局部结构体;
       
6、结构体变量中成员访问;
                一般形式:
                        结构变量名。成员名;
                             stu1.num;
                            stu2.name;
                            stu3.age;
                        int main(int argc, const char * argv[]) {
                            // insert code here...
                            struct {
                                int num;
                                int age;
                                char *name;
                            } stu1,stu2,stu3;
                            stu1.num=10;
                            stu2.name="张三";
                            stu3.age=21;
                            stu1.name="李四";
                            printf("%s\n%s\n",stu2.name,stu1.name);
                            return 0;
                        }
                        中文编码:gbk国际通用编码一个汉字占用2个字节
                        Xcode用的utf-8国际通用编码占用3个字节
7、结构体变量的初始化;
        1)先定义结构体变量,然后再初始化;
                stu1.num=10;
                    stu2.name="张三";
                    stu3.age=21;
                    stu1.name="李四";
                    printf("%s\n%s\n",stu2.name,stu1.name);
        2)定义结构体变量同时进行初始化;
                初始化顺序和定义顺序一致
                struct stu {
                        int num;
                        int age;
                        char *name;
                    } stu1,stu2,stu3;
                    struct stu stu5={8,8,"张三"};
        3)定义结构体同时,指定元素的初始化;
                struct stu stu5={.num=10};
               
8、结构体变量的存储原理
        结构体占用的内存空间是每个成员占用的字节数之和(考虑对齐问题);
        结构体占用的空间是其中没有个元素占用空间的和,是用某一个数的倍数读取;

9、占用存储空间的大小;
        1)先找对齐模数,
                是结构体中的基本数据类型中占用字节最大的一个;
                模数是几个就几个分,是4,就一次分4个字节,分配给基本类型,
        2)再将结构体内所有数据类型相加,
        3)再判断是不是模数的整数,是否对齐;
        4)不是再找模数;
       
       
        只有数组可以连接因为每一个char字符占用一个字节
       
10、结构体变量作用域
        1)全局
        定义一个全局结构体,作用域到文件末尾
        2)局部
        作用域到函数的结尾;

1 个回复

倒序浏览
很好很详细哈,加油
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马