我已经将缓冲区设置为大小100. 我在声明缓冲区的主函数中显示缓冲区。但是,当我将缓冲区传递给函数并获取sizeof'4'时,我认为它应该是100,因为这是我在主要版本中创建的缓冲区的大小。 输出: 缓冲区大小:100 的sizeof(缓冲液):4将char缓冲区传递给函数并获取缓冲区的大小
#include <string.h>
#include <stdio.h>
void load_buffer(char *buffer);
int main()
{
char buffer[100];
printf("buffer size: %d\n", sizeof(buffer));
load_buffer(buffer);
return 0;
}
void load_buffer(char *buffer)
{
printf("sizeof(buffer): %d\n", sizeof(buffer));
}
在main()中显式声明了一个数组,而在load_buffer()中声明了一个指针。不同之处在于,在main()中,编译器知道缓冲区是一个数组,但是在load_buffer()中,编译器不知道缓冲区是来自数组,还是堆中分配的内存和结构或其他。编译器只知道内存地址(因此是一个指针),所以sizeof()返回内存地址的大小,它的长度是4个字节(因为它是一个32位的机器,如果它是一个64位的机器,它将是8字节长)。希望这有助于理解更多。 – AndaluZ 2014-04-01 12:15:53
而不是sizeof()函数,使用strlen(),然后它返回指针值的大小。 – NandhaKumar 2018-01-05 06:18:47