0

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

3 回答 3

6

指针运算以所指向类型的大小为单位工作。当你这样做时p1 - p2,你会得到单位的数量int,而不是单位的数量char。添加一些演员表:

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

编者按:SIZEOF应该可能返回ptrdiff_tsize_t

于 2013-07-16T18:45:42.920 回答
2

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

于 2013-07-16T18:45:34.097 回答
2

指针算法会考虑所指向事物的大小。如果您有一个指向p任何数据类型数组的指针,++p则将指针前进数据的大小。当您将两者相减时,结果除以大小。

如果不使用 sizeof 关键字,就没有可移植的方法来实现这一点。

于 2013-07-16T18:45:43.107 回答