sizeof代码?

dus*_*shu 0 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);
}
Run Code Online (Sandbox Code Playgroud)

Car*_*rum 6

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

return (char *)p1 - (char *)p2;
Run Code Online (Sandbox Code Playgroud)

编者注:SIZEOF应该回归ptrdiff_tsize_t.