sizeof代码?

时间:2013-07-16 18:42:51

标签: c sizeof

我试图写一个简单的代码,它充当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);
}

3 个答案:

答案 0 :(得分:6)

指针算法以指向类型的大小为单位工作。执行p1 - p2后,您获得int个单位的数量,而不是char个单位的数量。添加一些演员:

return (char *)p1 - (char *)p2;

编辑说明:SIZEOF可能应该返回ptrdiff_tsize_t

答案 1 :(得分:2)

指针算术再次命中。就像p1++将指针递增1 * sizeof(pointer)一样,p1-p2将结果除以sizeof(p1)

答案 2 :(得分:2)

指针算法将要指向的事物的大小考虑在内。如果指针p指向任何数据类型的数组,++p将使指针按数据大小前进。当你减去两个时,结果除以大小。

如果不使用sizeof关键字,就没有可行的方法来实现它。