-1

我正在创建以下缓冲区:

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,但这是为什么呢?

4

3 回答 3

3

这不像那样工作

 sizeof(buffer);

返回它的大小buffer是一个指针,而不是一个数组。如果您有如下数组

 char szArray[100];

然后

 sizeof(szArray);

将返回 100,因为szArray它是一个数组,但指针不是数组。

于 2012-11-15T18:54:58.737 回答
0

因为您打印出变量buffer的大小,它是一个指向字符缓冲区的指针。指向 char 数组的指针在内存中直接占 4 个字节的权重,这就是它向您打印 4 而不是 1024 的原因。

于 2012-11-15T18:58:17.143 回答
0

在您的情况下sizeof(buffer)是指针的大小,因此 32 位机器上的结果是 4 在 64 位机器上是 8。


char arr[1024];
int size = sizeof(arr); //=1024

这里我们测量数组的大小,而不是指针。您需要记住指针的作用类似于数组,但不是数组。实际上,在非常低的水平上,它们看起来相同,但是在C水平上却存在差异。

于 2013-10-13T18:34:27.267 回答