【C语言提高42】结构体的高级话题:偏移量
2016-01-09 10:50
302 查看
</pre><pre>
结构体中的偏移量是指:结构体中元素地址相对于大结构体起始地址的偏移大小
定义如下一个结构体:typedef struct AdvTeacher { char name[64]; //64字节 t1.age 相对结构体的偏移量是64 int age; //4 int p; //4 t1.p 相对结构体偏移量是68 char*pname2; }AdvTeacher;
AdvTeacher t1; AdvTeacher*p = NULL; strcpy(p,"dddd"); //向指针所指向的内存空间拷数据 等价于向0地址拷数据 一拷就断
这句话 是在cpu中计算 并没有操作内存 所以能通过 并且指针就是一个变量 对变量加加减减 天经地义
p - 1; //编译通过 运行通过
指针与指针相减是没问题的
p - p;//没问题 0-0
指针加指针是没有意义的
p + p; //错误
因为现在指向0地址 打印出的大小相对于大结构体起始地址的偏移量
int offsize= (int)&(p->age);//相对于0的偏移地址
告诉编译器用AdvTeacher*的形式解释0开始处内存
int offsize =(int) &(((AdvTeacher*)0)->age); //64 偏移量 //&(t1.age)
AdvTeacher t1; AdvTeacher*p = NULL; p = &t1; //这样做的话 下面offsize1 相当于求出age的真实地址 int offsize1 = (int)&(p->age); //相对于0的偏移地址 因为现在指向0地址 打印出的大小相对于大结构体起始地址的偏移量 <span style="color:#ff6600;">//如果想计算相对结构体大地址的偏移量的话可以这样干 把指针p强制转换为int在减</span> int offsize2 = (int)&(((AdvTeacher*)0)->age)-(int)p;
相关文章推荐
- 字符串的基本操作,c语言实现
- 【C语言天天练(二四)】内存分配
- Sicily 1624. Cryptoquote
- c++设计模式(一)工厂模式
- 【C语言提高41】结构体的浅copy和深copy
- 【图像处理】C++将读取图像并将图像转换为矩阵的形式
- C语言字符串处理函数
- C语言内存分配详解
- C++ 不要忘记指针变量的初始化
- C语言学习之关键字第十一讲
- Chromium中多线程及并发技术要点(C/C++)
- 决定干点事儿--翻译一下《effective modern c++》
- 决定干点事儿--翻译一下《effective modern c++》
- 谁是代替C语言的“潜力股”?
- C++11新特性之 std::forward(完美转发)
- C++11新特性之 std::forward(完美转发)
- C++入门(11):高级OOP技术:虚方法和抽象方法
- 一起talk C栗子吧(第九十 三回:C语言实例--进程间通信之临界资源)
- C语言字符的赋值与输出格式
- C/C++预处理指令#define #ifdef #ifndef #endif