我试图写一个简单的代码,它充当sizeof(特别是对于此代码中的int)。但为什么它显示1作为输出?它应该是4。
#include<stdio.h>
int SIZEOF(int *);
int main(void)
{
int a;
printf("Size is:%d bytes\n",SIZEOF(&a));
return 0;
}
int SIZEOF(int *p1)
{
int *p2;
p2=p1;
p1++;
return (p1-p2);
}
答案 0 :(得分:6)
指针算法以指向类型的大小为单位工作。执行p1 - p2
后,您获得int
个单位的数量,而不是char
个单位的数量。添加一些演员:
return (char *)p1 - (char *)p2;
编辑说明:SIZEOF
可能应该返回ptrdiff_t
或size_t
。
答案 1 :(得分:2)
指针算术再次命中。就像p1++
将指针递增1 * sizeof(pointer)
一样,p1-p2
将结果除以sizeof(p1)
。
答案 2 :(得分:2)
指针算法将要指向的事物的大小考虑在内。如果指针p
指向任何数据类型的数组,++p
将使指针按数据大小前进。当你减去两个时,结果除以大小。
如果不使用sizeof关键字,就没有可行的方法来实现它。