我正在创建以下缓冲区:
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
它是一个数组,但指针不是数组。
因为您打印出变量buffer的大小,它是一个指向字符缓冲区的指针。指向 char 数组的指针在内存中直接占 4 个字节的权重,这就是它向您打印 4 而不是 1024 的原因。
在您的情况下sizeof(buffer)
是指针的大小,因此 32 位机器上的结果是 4 在 64 位机器上是 8。
char arr[1024];
int size = sizeof(arr); //=1024
这里我们测量数组的大小,而不是指针。您需要记住指针的作用类似于数组,但不是数组。实际上,在非常低的水平上,它们看起来相同,但是在C
水平上却存在差异。