【C语言提高42】结构体的高级话题:偏移量

本文探讨了C语言中结构体的偏移量概念,即结构体元素地址相对于结构体起始地址的偏移大小。指出偏移量的计算是在CPU层面进行,不涉及内存操作,并强调指针作为变量的加减运算的合理性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

</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;













评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值