为什么sizeof报告不同变量的相同大小(8个字节)?

时间:2014-09-26 00:27:34

标签: c byte sizeof

我是C的新手,我试图说明int / long / short有多少字节。请记住,我必须有变量,所以我不能只说sizeof(int)。任何帮助将不胜感激!

#include <stdio.h>

int main()
{
short* A;
int* B;
long* C;

printf("Size of integer variable = %d bytes\n", sizeof(A));
printf("Size of integer variable = %d bytes\n", sizeof(B));
printf("Size of integer variable = %d bytes\n", sizeof(C));
return 0;
}

2 个答案:

答案 0 :(得分:5)

您调用的每个变量sizeof实际上都是变量的指针。这些指针在64位应用程序中始终为8个字节(8个字节x每个字节8位= 64位),无论它们指向何种类型的变量。在32位应用程序中,它们将返回4个字节(4字节x每字节8位= 32位)。这是因为指针是内存位置的地址,并且该地址的大小不依赖于指针所指向的变量的大小。

您可以通过解除引用 sizeof函数中的指针来计算指针所指向的变量的大小:

printf("Size of short variable = %d bytes\n", sizeof(*A));
printf("Size of integer variable = %d bytes\n", sizeof(*B));
printf("Size of long variable = %d bytes\n", sizeof(*C));

这将输出以下内容(可能取决于编译器):

Size of short variable = 2 bytes
Size of integer variable = 4 bytes
Size of long variable = 4 bytes

答案 1 :(得分:0)

您分别测试short int指针,int指针和long int指针的大小。在许多系统上,所有指针都具有相同的大小。

您可能对看起来像这样的代码感兴趣。请注意缺少* s。

#include <stdio.h>

int main()
{
    short A;
    int B;
    long C;

    printf("Size of integer variable = %d bytes\n", sizeof(A));
    printf("Size of integer variable = %d bytes\n", sizeof(B));
    printf("Size of integer variable = %d bytes\n", sizeof(C));
    return 0;
}