文章目录

  • 一、指针运算 与 指针内存操作
  • 二、结构体偏移量计算

一、指针运算 与 指针内存操作


指针变量算术运算 ( 指针可以是任意值 ) : 指针 是一个变量 , 如果对指针进行 算术 / 逻辑 等运算 , 其效果等同于 对 int 整型变量 进行 算术运算 , 编译运行 并不会报错 ;

char *p = NULL;// 下面的操作 编译 运行 都可以通过
p + 1;
p - 1;
p * 20;

指针进行内存操作 ( 指针必须合法 ) : 但是注意 , 如果要 对 指针 进行内存操作 , 如使用 * 获取指针指向的数据 , 或者使用 memset 修改指针指向的数据 , 或者 free 释放指针 , 要操作的 指针变量 , 必须是 合法的指针 ;

char *p = NULL;// 下面的操作 涉及使用指针进行内存操作 , 编译通过 , 运行时报错
*p;
free(p);

二、结构体偏移量计算


定义结构体 :

/*** @brief The Student struct* 定义 结构体 数据类型 , 同时为该结构体类型声明 别名* 可以直接使用 别名 结构体变量名 声明结构体类型变量* 不需要在前面添加 struct 关键字*/
typedef struct Student
{// 声明变量时 , 会自动分配这 5 字节内存// 赋值时 , 可以直接使用 = 赋值字符串char name[5];  // 0 ~ 4 字节int age;     // 5 ~ 8 字节// 声明变量时 , 只会为 4 字节指针分配内存// 具体的 字符串内存 需要额外使用 malloc 申请内存// 赋值时 , 必须使用 strcpy 函数 , 向堆内存赋值char *address; // 9 ~ 12 字节
}Student;

求上述 Student 结构体的 age 成员的偏移量 ;

0 地址 , 按照 Student 结构体 内存 形式进行解释 , 即将 0 地址指针 强转为 Student * 类型 ;

(Student *)0

然后取上述 Student * 指针类型的 age 成员 ;

((Student *)0)->age

获取上述 age 成员的地址 ;

&(((Student *)0)->age)

age 成员的地址转为 int 类型 ;

(int)&(((Student *)0)->age)

上述获取的就是 Student 结构体中 , age 成员的偏移量 ;

【C 语言】结构体 ( 指针运算与指针内存操作 | 结构体成员偏移量计算 )相关推荐

  1. 【C基础】指针/指针运算/二级指针/函数指针

    指针定义: 指针是一种数据类型,使用它可以用来定义指针变量,指针变量中存储的其实是整数,这种整数代表了内存的编号. 指针的使用: 1.函数之间相独立,但有些时候需要共享变量.传参是值传递全局变量容易命 ...

  2. C++ 笔记(14)— 指针(指针声明、取地址、取值、new/delete、NULL指针、指针运算、指针数组、数组指针、指针传递给函数、从函数返回指针)

    1. 声明指针 指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址.就像其他变量或常量一样,您必须在使用指 针存储其他变量地址之前,对其进行声明. 指针变量声明的一般形式为: type * ...

  3. 【C 语言】结构体 ( 结构体变量内存操作 | 通过 “ . “ 操作符操作结构体内存空间 | 通过 “ -> “ 操作符操作结构体内存空间 )

    文章目录 一.通过 " . " 操作符操作结构体内存空间 二.通过 " -> " 操作符操作结构体内存空间 三.代码示例 一.通过 " . &q ...

  4. 对指针的详细认识(一)—— 指针概念+指针类型+野指针+指针运算+二级指针

    文章目录 指针是什么? 指针的定义 指针的大小 指针类型 指针有哪些类型? 指针类型有什么意义? 野指针 野指针的成因 如何避免野指针 指针运算 指针+-整数 指针-指针 指针的关系运算 二级指针 指 ...

  5. python内存结构_陈天奇:内存张量结构DLPack的PythonAPI来了

    陈天奇:内存张量结构DLPack的PythonAPI来了 新智元2021-02-28 14:25:22 [新智元导读]DLPack是一种开放的内存张量结构,用于在框架之间共享张量,近日,开发者陈天奇更 ...

  6. 手绘知识点——指针运算变量的内存分配原理

    九月的最后一天,首先祝我们的祖国生日快乐,让我们继续砥砺前行-- 来到了指针系列的第三篇,我们来说说指针的运算以及变量在内存中的存储问题,重点在于后者. 首先看一下指针的算术运算: int a = 1 ...

  7. 【驱动】使用结构体 file_operations封装驱动设备的操作 | 结构体初始化

    -----第一部分----- 最近学习到了Linux驱动章节的课程,对设备的对应驱动的注册有些困惑,看了下发现是把设备的所有操作方法封装到结构体 file_operations 中,这个结构体为所有的 ...

  8. 【C 语言】指针数据类型 ( 指针类型变量 与 指针指向的内存块 概念区别 | 指针赋值 | 指针运算 | 内存赋值 | 内存取值 | 内存修改注意事项 )

    文章目录 一.指针类型变量 与 指针指向的内存块 概念区别 1.指针赋值 2.指针运算 3.内存赋值 4.内存取值 5.内存修改注意事项 一.指针类型变量 与 指针指向的内存块 概念区别 指针类型变量 ...

  9. 从零开始C语言精讲篇5:指针

    文章目录 一.指针是什么? 二.指针和指针类型 三.野指针 3.1野指针成因 3.2规避野指针的方法 四.指针运算 4.1指针+-整数 4.2指针-指针 五.指针和数组 六.二级指针 七.指针数组 总 ...

最新文章

  1. 黄仁勋登上《时代周刊》2021年度全球具影响力人物
  2. 【工具分享】deepin v20.5桌面快捷方式编辑器:desktop-entry-editor
  3. C# WPF抽屉效果实现
  4. Smack+Openfire 接收和发送文件
  5. webstorm护眼绿柔主题分享(JetBrains都可用)
  6. Knowledge Distillation(知识蒸馏)Review--20篇paper回顾
  7. c#类的方法表的建立和方法的调用
  8. python开源bi_推荐一套开源BI工具?
  9. 传说中的世界500强面试题-数学能力
  10. PDF转CAD到底哪个软件比较好?
  11. 洛马公司获得阿联酋“萨德”导弹防御系统支持合同-我爱无人机网
  12. 这次,多地消防控制室双人值守可变单人值守
  13. 图像处理之EXIF信息
  14. 订单拆单-产品逻辑分析研究
  15. 超详细:安装Linux系统教程
  16. java 父委托机制优点_Java虚拟机父类委托机制设计的优点
  17. 【经验】通过JVM调优,让凯哥个人博客响应速度提升了不少
  18. ORB_SLAM2源码阅读(三)相机定位
  19. 回顾过往,布局未来:2022 年证券走势
  20. 安装elasticsearch无法访问9200:Empty reply from server

热门文章

  1. 《FPGA全程进阶---实战演练》第一章之如何学习FPGA
  2. 编写更好的CSS代码
  3. 领航的公开课 有空可以看看
  4. 微软在你的计算机里隐藏的秘密
  5. Spring 依赖注入(二、注入参数)
  6. MyEclipse 15 集成SVN
  7. 硬链接、软链接和inode
  8. chm文件无法正常显示
  9. DataGrid双向排序以及给HeaderText加图标
  10. ibatis 的 This SQL map does not contain a MappedStatement的错误