C语言结构体struct常见使用方法

上传人:新** 文档编号:488449998 上传时间:2023-03-19 格式:DOC 页数:8 大小:78.50KB
返回 下载 相关 举报
C语言结构体struct常见使用方法_第1页
第1页 / 共8页
C语言结构体struct常见使用方法_第2页
第2页 / 共8页
C语言结构体struct常见使用方法_第3页
第3页 / 共8页
C语言结构体struct常见使用方法_第4页
第4页 / 共8页
C语言结构体struct常见使用方法_第5页
第5页 / 共8页
点击查看更多>>
资源描述

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

1、-C语言构造体struct常见使用方法根本定义:构造体,通俗讲就像是打包封装,把一些有共同特征比方同属于*一类事物的属性,往往是*种业务相关属性的聚合的变量封装在部,通过一定方法访问修改部变量。构造体定义:第一种:只有构造体定义cppview plaincopy1. structstuff2. charjob20;3. intage;4. floatheight;5. ;第二种:附加该构造体类型的“构造体变量的初始化的构造体定义cppview plaincopy1. /直接带变量名Huqinwei2. structstuff3. charjob20;4. intage;5. floatheig

2、ht;6. Huqinwei;也许初期看不习惯容易困惑,其实这就相当于:cppview plaincopy1. structstuff2. charjob20;3. intage;4. floatheight;5. ;6. structstuffHuqinwei;第三种:如果该构造体你只用一个变量Huqinwei,而不再需要用cppview plaincopy1. structstuffyourname;去定义第二个变量。则,附加变量初始化的构造体定义还可进一步简化出第三种:cppview plaincopy1. struct2. charjob20;3. intage;4. floathei

3、ght;5. Huqinwei;把构造体名称去掉,这样更简洁,不过也不能定义其他同构造体变量了至少我现在没掌握这种方法。构造体变量及其部成员变量的定义及访问:绕口吧?要分清构造体变量和构造体部成员变量的概念。就像刚刚的第二种提到的,构造体变量的声明可以用:cppview plaincopy1. structstuffyourname;其成员变量的定义可以随声明进展:cppview plaincopy1. structstuffHuqinwei=manager,30,185;也可以考虑构造体之间的赋值:cppview plaincopy1. structstufffaker=Huqinwei;2

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

5、inwei;4. structstuff&ref=Huqinwei;5. ref.age=100;6. printf(Huqinwei.ageis%dn,Huqinwei.age);7. printf(ref.ageis%dn,ref.age);8. structstuff*ptr=&Huqinwei;9. ptr-age=200;10. printf(Huqinwei.ageis%dn,Huqinwei.age);11. printf(ptr-ageis%dn,Huqinwei.age);12. /既然都写了,把指针引用也加上吧13. structstuff*&refToPtr=ptr;14

6、. refToPtr-age=300;15. printf(Huqinwei.ageis%dn,Huqinwei.age);16. printf(refToPtr-ageis%dn,refToPtr-age);17. 更正:之前给引用的初始化语句写错了,而且没注明引用是纯C中没有的东西在这么个以C为幌子的博客中。引用是C+特有的一个机制,必须靠编译器支撑,至于引用转换到C中本质是什么,我有个帖子写过构造体也不能免俗,必须有数组:cppview plaincopy1. structtest2. inta3;3. intb;4. ;5. /对于数组和变量同时存在的情况,有如下定义方法:6. str

7、uctteststudent3=66,77,55,0,7. 44,65,33,0,8. 46,99,77,0;9. /特别的,可以简化成:10. structteststudent3=66,77,55,0,11. 44,65,33,0,12. 46,99,77,0;变长构造体可以变长的数组cppview plaincopy1. *include2. *include3. *include4. typedefstructchangeable5. intit;6. charpc0;7. schangeable;8. main()9. printf(sizeofstructchangeable:%d

8、n,sizeof(schangeable);10. schangeable*pchangeable=(schangeable*)malloc(sizeof(schangeable)+10*sizeof(char);11. printf(sizeofpchangeable:%dn,sizeof(pchangeable);12. schangeable*pchangeable2=(schangeable*)malloc(sizeof(schangeable)+20*sizeof(char);13. pchangeable2-it=20;14. printf(pchangeable2-it:%dn,

9、pchangeable2-it);15. strncpy(pchangeable2-pc,helloworld,11);16. printf(%sn,pchangeable2-pc);17. printf(sizeofpchangeable2:%dn,sizeof(pchangeable2);18. 运行结果cppview plaincopy1. sizeofstructchangeable:42. sizeofpchangeable:43. pchangeable2-it:204. helloworld5. sizeofpchangeable2:4构造体本身长度就是一个int长度这个int值

10、通常只为了表示后边的数组长度,后边的数组长度不计算在,但是该数组可以直接使用。说后边是个指针吧?指针也占长度!这个是不占的!原理很简单,这个东西完全是数组后边的尾巴,malloc开辟的是一片连续空间。其实这不应该算一个机制,感觉应该更像一个技巧吧20160405补充:非弹性数组不能用char a这种形式定义弹性fle*ible变量,必须明确大小。弹性数组在构造体中,下面的形式是唯一允许的:cppview plaincopy1. structs2. 3. inta;4. charb;5. ;顺序颠倒会让b和a数据重合,会在编译时不通过。char b = hell;也不行C和C+都不行少了整型变量

11、a又会让整个构造体长度为0,piler不允许编译通过!不同的是,其实C+形式上是允许空构造体的,本质上是通过机制防止了纯空构造体和类对象,自动给空构造体对象分配一个字节sizeof返回1方便区分对象,防止地址重合!所以呢,C如果有空构造体,定义两个或一打,或干脆一个数组该构造体的变量对象,地址是完全一样的!调试看程序运行,这些语句其实都被当屁放了,根本没有运行,没有实际意义,C压根不支持空构造体这种东西或者说我也没想好什么场合有用cppview plaincopy1. structs22. 3. /chara=hasd;4. /intc;5. ;6. intmain()7. 8. struct

12、s2s22;9. structs2s23;10. structs2s24;11. structs2s25;12. 例外的是,C+唯独不给带弹性数组的构造体分配空间可能怕和变长构造体机制产生*种冲突,比方大小怎么算:cppview plaincopy1. structs2. 3. charb;4. ;cppview plaincopy1. structs2. 3. /charb;4. ;C+中两者是不一样的,空的构造体反而“大sizeof()返回120160321补充:这个机制利用了一个非常重要的特性数组和指针的区别!数组和指针在很多操作上是一样的,但是本质不一样。最直观的,指针可以改指向,数组不可以,因为数组占用的每一个存地址都用来保存变量或者对象,而指针占用的存地址保存的是一个地址,数组没有单独的保存指向地址的这样一个构造。数组的位置是固定的,正如指针变量自身的位置也是固定的,改的是指针的值,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 施工组织

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