您的位置:首页 > 编程语言 > C语言/C++

【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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: