我正在创建以下缓冲区:
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,但这是为什么?
这不是那样工作的
sizeof(buffer);
返回 buffer
的大小,它是一个指针,而不是一个数组。如果您有如下所示的数组
char szArray[100];
然后
sizeof(szArray);
将返回 100,因为szArray
是一个数组,但指针不是数组。
因为您打印出了变量缓冲区的大小,它是指向字符缓冲区的指针。指向 char 数组的指针在内存中直接权重为 4 个字节,这就是为什么它会打印给您 4 而不是 1024。
在您的情况下sizeof(buffer)
是指针的大小,因此 32 位机器上的结果是 4 在 64 位机器上是 8。
char arr[1024];
int size = sizeof(arr); //=1024
在这里,我们测量数组的大小,而不是指针。您需要记住,指针的行为类似于数组,但不是数组。实际上,在非常低的级别中,它们看起来是一样的,但是在C
级别中存在差异。