C语言 结构体中的成员域偏移量
//C语言中结构体中的成员域偏移量 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<string.h>typedef struct _student{char name[30];//32int num; }Student;void main(){Student *p = NULL;printf("%x\n", p);//打印 0p = p - 1; printf("%x\n",p);//打印ffffdc//说明 指针的加法运算前面已有详述,p - 1移动了 sizeof(Student)个字节//由于结构体字节对齐原则,char name[30]数组占据32个字节,不是30个,不明白请看结构体那一章//计算出p的步长是 32+4=36 p = p - 2; printf("%x\n", p);//打印ffff94 p = p + 2; printf("%x\n", p);//打印ffffdc//说明:以上两个的解释同p-1 p = (Student *)1;p = p - 1;printf("p - 1=%x\n", p);//打印ffffddp = (Student *)1;p = p - p; //警告:警告 1 warning C4047: “=”:“Student *”与“int”的间接级别不同 tec01.c 33 1 C005//警告产生原因是p-p得出的值是int型 p是Student *类型//由此说明:p - p和p-1有所区别,p-p只是单纯的p的值加减,p-p=0,返回值是int型,而p-1是指针间的运算,返回值是指针printf("p - p=%x\n", p);//打印0//结构体指针中 . ->操作符本质上是寻址,寻找每一个成员相对于结构体起始位置的内存偏移,//该操作在cpu里执行,不会操作内存,所以 p->num等价于 ((Student *)0)->num 因为不会操作内存,所以不会报错printf("%x\n", &(p->num));//打印20 (此处是16进制)//说明 &(p->num)是取p->num得地址 num相对于结构体起始位置的内存偏移量是char name[30] 32个字节(结构体字节对齐原则)system("pause"); }
转载于:https://www.cnblogs.com/zhanggaofeng/p/5426775.html
C语言 结构体中的成员域偏移量相关推荐
- c语言的结构体能存放函数吗,在C语言结构体中添加成员函数
我们在使用C语言的结构体时,经常都是只定义几个成员变量,而学过面向对象的人应该知道,我们定义类时,不只是定义了成员变量,还定义了成员方法,而类的结构和结构体非常的相似,所以,为什么不想想如何在C语言结 ...
- C语言结构体里的成员数组和指针
单看这文章的标题,你可能会觉得好像没什么意思.你先别下这个结论,相信这篇文章会对你理解C语言有帮助.这篇文章产生的背景是在微博上,看到@Laruence同学出了一个关于C语言的题,微博链接.微博截图如 ...
- 结构体自定义指针函数c语言,C语言结构体中的函数指针
C语言结构体中的函数指针 C语言结构体中的函数指针内容由小编收集整理,希望对您的 学习有所帮助!更多内容请关注应届毕业生考试网! 结构体是由一系列具有相同类型或不同类型的数据构成的数据集合.所以,标准 ...
- C语言结构体中的位段
C语言结构体中的位段 位段的内存分配 位段的成员可以是 int unsigned int signed int 或者是 char (属于整形家族)类型 位段的空间上是按照需要以4个字节( int )或 ...
- C语言结构体中定义函数指针详解
C语言结构体中定义函数指针详解 结构体指针函数应用场景之一--驱动程序编写 结构体的一些基本用法 形式1:先定义结构体类型,再定义变量 形式2:在定义类型的同时定义变量 形式3:直接定义变量,用无名结 ...
- C语言结构体中的冒号用法
结构体中的冒号表示位域. 位域出现的原因是由于某些信息的存储表示只需要几个bit位就可以表示而不需要一个完整的字节,同时也是为了节省存储空间和方便处理. 其表示形式为: struct 位域结构名 { ...
- 结构体自定义指针函数c语言,详解C语言结构体中的函数指针
结构体是由一系列具有相同类型或不同类型的数据构成的数据集合.所以,标准C中的结构体是不允许包含成员函数的,当然C++中的结构体对此进行了扩展.那么,我们在C语言的结构体中,只能通过定义函数指针的方式, ...
- c语言 一个函数返回结构体指针,详解C语言结构体中的函数指针
结构体是由一系列具有相同类型或不同类型的数据构成的数据集合.所以,标准C中的结构体是不允许包含成员函数的,当然C++中的结构体对此进行了扩展.那么,我们在C语言的结构体中,只能通过定义函数指针的方式, ...
- C语言结构体中__packed 和位段的理解!
C语言中__packed 和位段的理解 一:__packed typedef __packed struct struct常用在数据结构中.而struct的字节对齐方式对于嵌入式底层的程序员来讲是必须 ...
- C语言结构体中字符串赋值
struct student { char name[20]; }; #include <stdio.h> main() { struct student s1; s1.name = &q ...
最新文章
- 在Mac OS X 10.13.2中安装nltk 和numpy
- 在熊市中厚积薄发 比特币现金加大基础设施、应用程序和协议创新力度
- 【MySQL】如何最大程度防止人为误操作MySQL数据库?这次我懂了!!
- 服务器系统是选择CentOS,还是选择Ubuntu
- 洛谷P2463 [SDOI2008]Sandy的卡片(后缀数组SA + 差分 + 二分答案)
- django 使用原生SQL语句反向生成MODELS.PY中的表结构
- 一次性送出25本北大出版社AI类当当最畅销的25本书!包括~机器学习、深度学习实战、数学基础等...
- P2P协议:我下小电影,99%急死你
- IPOP下的tcl脚本
- 月薪过万是普遍现象吗?很抱歉,这事大部分人的错觉
- 常见的USB VID
- 新生儿的二类(自费)疫苗(截止2019年)
- DNS A记录 NS记录 CNAME记录 TXT记录 TTL值
- iOS——编译与链接
- 【netron】模型可视化工具netron
- Java Hutool 汉字转拼音码
- 黎明之路如何用电脑玩 黎明之路PC电脑版玩法教程
- 代理模式 Proxy
- MySQL如何自定义函数
- 谁在使用Linux?