//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语言 结构体中的成员域偏移量相关推荐

  1. c语言的结构体能存放函数吗,在C语言结构体中添加成员函数

    我们在使用C语言的结构体时,经常都是只定义几个成员变量,而学过面向对象的人应该知道,我们定义类时,不只是定义了成员变量,还定义了成员方法,而类的结构和结构体非常的相似,所以,为什么不想想如何在C语言结 ...

  2. C语言结构体里的成员数组和指针

    单看这文章的标题,你可能会觉得好像没什么意思.你先别下这个结论,相信这篇文章会对你理解C语言有帮助.这篇文章产生的背景是在微博上,看到@Laruence同学出了一个关于C语言的题,微博链接.微博截图如 ...

  3. 结构体自定义指针函数c语言,C语言结构体中的函数指针

    C语言结构体中的函数指针 C语言结构体中的函数指针内容由小编收集整理,希望对您的 学习有所帮助!更多内容请关注应届毕业生考试网! 结构体是由一系列具有相同类型或不同类型的数据构成的数据集合.所以,标准 ...

  4. C语言结构体中的位段

    C语言结构体中的位段 位段的内存分配 位段的成员可以是 int unsigned int signed int 或者是 char (属于整形家族)类型 位段的空间上是按照需要以4个字节( int )或 ...

  5. C语言结构体中定义函数指针详解

    C语言结构体中定义函数指针详解 结构体指针函数应用场景之一--驱动程序编写 结构体的一些基本用法 形式1:先定义结构体类型,再定义变量 形式2:在定义类型的同时定义变量 形式3:直接定义变量,用无名结 ...

  6. C语言结构体中的冒号用法

    结构体中的冒号表示位域. 位域出现的原因是由于某些信息的存储表示只需要几个bit位就可以表示而不需要一个完整的字节,同时也是为了节省存储空间和方便处理. 其表示形式为: struct 位域结构名 { ...

  7. 结构体自定义指针函数c语言,详解C语言结构体中的函数指针

    结构体是由一系列具有相同类型或不同类型的数据构成的数据集合.所以,标准C中的结构体是不允许包含成员函数的,当然C++中的结构体对此进行了扩展.那么,我们在C语言的结构体中,只能通过定义函数指针的方式, ...

  8. c语言 一个函数返回结构体指针,详解C语言结构体中的函数指针

    结构体是由一系列具有相同类型或不同类型的数据构成的数据集合.所以,标准C中的结构体是不允许包含成员函数的,当然C++中的结构体对此进行了扩展.那么,我们在C语言的结构体中,只能通过定义函数指针的方式, ...

  9. C语言结构体中__packed 和位段的理解!

    C语言中__packed 和位段的理解 一:__packed typedef __packed struct struct常用在数据结构中.而struct的字节对齐方式对于嵌入式底层的程序员来讲是必须 ...

  10. C语言结构体中字符串赋值

    struct student { char name[20]; }; #include <stdio.h> main() { struct student s1; s1.name = &q ...

最新文章

  1. 在Mac OS X 10.13.2中安装nltk 和numpy
  2. 在熊市中厚积薄发 比特币现金加大基础设施、应用程序和协议创新力度
  3. 【MySQL】如何最大程度防止人为误操作MySQL数据库?这次我懂了!!
  4. 服务器系统是选择CentOS,还是选择Ubuntu
  5. 洛谷P2463 [SDOI2008]Sandy的卡片(后缀数组SA + 差分 + 二分答案)
  6. django 使用原生SQL语句反向生成MODELS.PY中的表结构
  7. 一次性送出25本北大出版社AI类当当最畅销的25本书!包括~机器学习、深度学习实战、数学基础等...
  8. P2P协议:我下小电影,99%急死你
  9. IPOP下的tcl脚本
  10. 月薪过万是普遍现象吗?很抱歉,这事大部分人的错觉
  11. 常见的USB VID
  12. 新生儿的二类(自费)疫苗(截止2019年)
  13. DNS A记录 NS记录 CNAME记录 TXT记录 TTL值
  14. iOS——编译与链接
  15. 【netron】模型可视化工具netron
  16. Java Hutool 汉字转拼音码
  17. 黎明之路如何用电脑玩 黎明之路PC电脑版玩法教程
  18. 代理模式 Proxy
  19. MySQL如何自定义函数
  20. 谁在使用Linux?

热门文章

  1. php 框架测试,PHP测试框架PHPUnit组织测试操作示例
  2. 页面转发后文本显示???_无代码软件开发中超文本显示设计
  3. 中小企业应该将云存储用于主数据吗?
  4. 函数式编程与面向对象编程[1]: Lambda表达式 函数柯里化 高阶函数
  5. ios-后台运行UIApplication
  6. pytorch自定义初始化权重
  7. python源码保护之cython
  8. 几种常见机器学习距离公式
  9. 斯坦福大学stanford
  10. 超定方程组的householder变换求解matlab实现