在实现我自己的sizeof运算符时,我遇到了一个例子,如下所述。
#define my_sizeof(type) (char *)(&type+1)-(char*)(&type)
int main()
{
double x;
printf("%d", my_sizeof(x));
getchar();
return 0;
}
我不确定他们为什么在#define中使用(char *)而不是任何其他类型的演员。我需要知道所述语法的确切含义。有人可以帮助我理解这个......?
提前致谢。
答案 0 :(得分:7)
了解它,你需要知道,当你写
double d[2];
double *p = d;
p = p + 1; p is now pointing to the next double i.e. &d[1]
内存中的 p
已向前移动sizeof(double)
个字节
如果将p视为字符指针,则可以获得偏移量已更改的字节数:
double d[2];
double *p = d;
char* start = (char*)p;
p = p + 1;
char* end = (char*)p;
现在end-start
给出了字节(字符)IOW sizeof(double)
的偏移量。
答案 1 :(得分:1)
在C中,sizeof char
是(根据定义)1。它们转换为char *
以便能够减去指针以获得指向的对象的大小。
这将主要起作用,但AFAIU不顾一切地“指向下一个对象”,如果它不在数组中并不总能保证正常工作。此外,在数组中具有requited padding的对象的大小不一定是对象的大小。
Bletcherous。只需使用sizeof
即可。
`