C语言学习知识结构体(struct)常见使用方法

上传人:cl****1 文档编号:498599182 上传时间:2023-11-23 格式:DOCX 页数:10 大小:40.81KB
返回 下载 相关 举报
C语言学习知识结构体(struct)常见使用方法_第1页
第1页 / 共10页
C语言学习知识结构体(struct)常见使用方法_第2页
第2页 / 共10页
C语言学习知识结构体(struct)常见使用方法_第3页
第3页 / 共10页
C语言学习知识结构体(struct)常见使用方法_第4页
第4页 / 共10页
C语言学习知识结构体(struct)常见使用方法_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《C语言学习知识结构体(struct)常见使用方法》由会员分享,可在线阅读,更多相关《C语言学习知识结构体(struct)常见使用方法(10页珍藏版)》请在金锄头文库上搜索。

1、C语言结构体(struct)常见使用方法基本定义:结构体,通俗讲就像是打包封装,把一些有共同特征(比如同属于某一类事物 的属性,往往是某种业务相关属性的聚合)的变量封装在内部,通过一定方法访问修改内 部变量。结构体定义:第一种:只有结构体定义cpp view plain copy1.2.3.4.struct stuffchar job20; int age;float height;5.;第二种:附加该结构体类型的“结构体变量”的初始化的结构体定义cpp view plain copy1.2.3.4.5.6./直接带变量名Huqinwei struct stuffchar job20; int

2、 age;float height;Huqinwei;也许初期看不习惯容易困惑,其实这就相当于:cpp view plain copystruct stuffchar job20;int age;4.float height;5.6.第三种:如果该结构体你只用一个变量Huqinwei,而不再需要用cpp view plain copy;struct stuff Huqinwei;1. struct stuff yourname;去定义第二个变量。那么,附加变量初始化的结构体定义还可进一步简化出第三种:cpp view plain copy1.struct2.char job20;3.int a

3、ge;4.float height;5.Huqinwei;把结构体名称去掉,这样更简洁,不过也不能定义其他同结构体变量了一一至少我现在没 掌握这种方法。结构体变量及其内部成员变量的定义及访问:绕口吧?要分清结构体变量和结构体内部成员变量的概念。就像刚才的第二种提到的,结构体变量的声明可以用:cpp view plain copy1. struct stuff yourname;其成员变量的定义可以随声明进行:cpp view plain copyc1. struct stuff Huqinwei = manager,30,185;也可以考虑结构体之间的赋值:cpp view plain cop

4、y1. structstuff faker =Huqinwei;2. /或structstuff faker2;3. /faker2= faker;4. 打印,可见结构体的每一个成员变量一模一样如果不使用上边两种方法,那么成员数组的操作会稍微麻烦(用for循环可能好点)cpp view plain copy1.Huqinwei.job0 = M;2.Huqinwei.job1 = a;3.Huqinwei.age = 27;4.nbsp;Huqinwei.height = 185;结构体成员变量的访问除了可以借助符号”,还可以用”-”访问(下边会提)。引用(C+ )、指针和数组:首先是引用和指

5、针:cpp view plain copy1. int main()2. 3. struct stuff Huqinwei;4.4. struct stuff &ref = Huqinwei;5. ref.age = 100;6. printf(Huqinwei.age is %dn,Huqinwei.age);7. printf(ref.age is %dn,ref.age);9.8. struct stuff *ptr = &Huqinwei;9. ptr-age = 200;10. printf(Huqinwei.age is %dn,Huqinwei.age);11. printf(p

6、tr-age is %dn,Huqinwei.age);12. /既然都写了,把指针引用也加上吧13. struct stuff *&refToPtr = ptr;14. refToPtr-age = 300;15. printf(Huqinwei.age is %dn,Huqinwei.age);16. printf(refToPtr-age is %dn,refToPtr-age);19.20.更正:之前给引用的初始化语句写错了,而且没注明引用是纯C中没有的东西(在这么个 以C为幌子的博客中)。引用是C+特有的一个机制,必须靠编译器支撑,至于引用转换到C中本质是什么,我有 个帖子写过结构体

7、也不能免俗,必须有数组:cpp view plain copy66,77,55,0,44,65,33,0,46,99,77,0;66,77,55,0,44,65,33,0,46,99,77,0;1. struct test2. int a3;3. int b;4. ;5. /对于数组和变量同时存在的情况,有如下定义方法:6. struct test student3=7.8.9. /特别的,可以简化成:10. struct test student3=11.12.变长结构体可以变长的数组cpp view plain copy1. #include 2. #include 3. #include

8、 4. typedef struct changeable5. int iCnt;6. char pc0;7. schangeable;8.8. main()9. printf(size of struct changeable : %dn,sizeof(schangeable);11.10. schangeable *pchangeable = (schangeable *)malloc(sizeof(schangeable) + I0*sizeof(char);11. printf(size of pchangeable : %dn,sizeof(pchangeable);14.12. s

9、changeable *pchangeable2 = (schangeable *)malloc(sizeof(schangeable )+ 20*sizeof(char);13. pchangeable2-iCnt = 20;14. printf(pchangeable2-iCnt : %dn,pchangeable2-iCnt);15. strncpy(pchangeable2-pc,hello world,11);16. printf(%sn,pchangeable2-pc);17. printf(size of pchangeable2 : %dn,sizeof(pchangeable

10、2);18. 运行结果cpp view plain copy1. size of struct changeable : 42. size of pchangeable : 43. pchangeable2-iCnt : 204. hello world5. size of pchangeable2 : 4结构体本身长度就是一个int长度(这个int值通常只为了表示后边的数组长度),后边的 数组长度不计算在内,但是该数组可以直接使用。(说后边是个指针吧?指针也占长度!这个是不占的!原理很简单,这个东西完全是数组 后边的尾巴,malloc开辟的是一片连续空间。其实这不应该算一个机制,感觉应该更像

11、一 个技巧吧)20160405 补充:非弹性数组不能用char a这种形式定义弹性(flexible)变量,必须明确大小。弹性数组在结构体中,下面的形式是唯一允许的:cpp view plain copy1. struct s2. 3. int a;4. char b;5. ;顺序颠倒会让b和a数据重合,会在编译时不通过。char b = hell;也不行(C和C+都不行)少了整型变量a又会让整个结构体长度为0, compiler不允许编译通过!不同的是,其实C+形式上是允许空结构体的,本质上是通过机制避免了纯空结构体和类对象,自动给空 结构体对象分配一个字节(sizeof ()返回1)方便区

12、分对象,避免地址重合!所以呢,c如 果有空结构体,定义两个(或一打,或干脆一个数组)该结构体的变量(对象),地址是完全一样 的! !调试看程序运行,这些语句其实都被当屁放了,根本没有运行,没有实际意义,C 压根不支持空结构体这种东西(或者说我也没想好什么场合有用)cpp view plain copy1.struct s22.3./char a=hasd;4./int c;5.;6.intmain()7.8.structs2s22;9.structs2s23;10.structs2s24;11.structs2s25;12.例外的是,C+唯独不给带弹性数组的结构体分配空间(可能怕和变长结构体机

13、制产生某种冲突,比如大小怎么算):cpp view plain copy1. struct s2. 3. char b;4. ;cpp view plain copy1. struct s2. 3. /char b;4. ;C+中两者是不一样的,空的结构体反而“大”(sizeof()返回1)20160321补充:这个机制利用了一个非常重要的特f 一数组和指针的区别!数组和指 针在很多操作上是一样的,但是本质不一样。最直观的,指针可以改指向,数组不可以, 因为数组占用的每一个内存地址都用来保存变量或者对象,而指针占用的内存地址保存的 是一个地址,数组没有单独的保存指向地址的这样一个结构。数组的位置是固定的,正如 指针变量自身的位置也是固定的,改的是指针的值,是指向的目标地址,而因为数组不存 储目标地址,所以改不了指向。企图把地址强制赋值给数组的话,也只是说把指针赋值给 数组,类型不兼容。结构体嵌套:结构体嵌套其实没有太意外的东西,只要遵循一定规律即可:cpp view plain copy1./对于“一锤子买卖”,2.struct A3.struct B4.int(5.6.b;7.8.a;9./使用如下方式访问:10.a.b.c = 10;只对最终的结构体变量感

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号