C/C++指针

某些算数运算可以用于非const指针,使其指向另一个位置

 ++	//	自增
 +=
 --
 -=

这种方法在数组、非类型化数据缓冲区中尤其有用
void*指针以一个char的大小(1B)增减;类型化指针按其指向的类型的大小增减

常量转换为指针

指针存储的地址实际上也是一个整数,因此可以将整数转换为指针类型
这个技巧可以用来计算成员偏移量,或者判断非法指针

但这种转换不能用于内存访问

定义一个结构体,现在要获取data成员的偏移量,就可以使用这种技巧

struct Test{
	int a;
	//	some other members
	Test* next;
	char data[1];
};

size_t offset = (char*)(&((Test*)1)->data) - (char*)(1);

将常量(整型)转换为指针的语义是
将该常量所代表的地址,作为该指针类型所指向类型的一个对象的起始地址
因此,上面转换的含义是,将0x1作为一个Test对象的起始地址,获取其data成员的地址,然后再减去起始地址,得到data成员,相对Test结构体起始地址的偏移量
从下面的结果可以看到,data成员的地址为0x11-->17,计算得到偏移量为16,结果符合预期

image

参考文档
Microsoft Learn

posted @ 2024-04-29 15:55  lifeAddicted  阅读(8)  评论(0)    收藏  举报