我正在创建以下缓冲区:
char *buffer;
int buffer_size = 1024;
buffer = (char*) ( malloc(buffer_size * sizeof(char) );
然后当我这样做时:
int actual_size = sizeof(buffer);
printf("Size: %d", actual_size);
它的印刷品是:
size: 4
虽然我希望它是1024,但为什么会这样?
答案 0 :(得分:3)
这不像那样
sizeof(buffer);
返回buffer
的大小,这是一个指针,而不是一个数组。如果你有一个如下的数组
char szArray[100];
然后
sizeof(szArray);
将返回100,因为szArray
是一个数组,但指针不是数组。
答案 1 :(得分:0)
因为你打印出变量 buffer 的大小,它是一个指向缓冲区的字符的指针。 指向char数组的指针直接在内存中加权4个字节,这就是它打印给你4而不是1024的原因。
答案 2 :(得分:0)
在你的情况下sizeof(buffer)
是指针的大小,因此32位机器上的结果是64位机器中的4是8。
char arr[1024];
int size = sizeof(arr); //=1024
这里我们测量数组的大小,而不是指针。你需要记住指针就像数组一样,但不是数组。实际上,在非常低的水平,它们看起来是一样的,但是在C
水平上存在差异。