char* pointer;
pointer = malloc (20000);
printf("%d", sizeof(pointer));
//output: 8
由于我使用 malloc 保留了 20000 个字节,因此我期望输出为 20000。但是,它返回 8。为什么会这样?
您必须使用 64 位系统/操作系统,这就是为什么它为 printf("%d", sizeof(pointer)); 打印 8 的原因
当你声明 char *p; 它将在您的内存中保留等于 sizeof(char *) 的空间。
现在,如果系统是 64 位,它将保留 8 个字节,或者如果它是 32 位,则它将保留 4 个字节。
现在
char* pointer;
pointer = malloc (20000);
当您定义指针 = malloc(20000) 时,它将在内存中保留一个 20000 字节的块,其中指针指向该块的第一个字节,它不会为指针分配 20000 字节。
sizeof
返回您传递给它的类型的大小。
类型是char *
,它只是指向一个大小的内存位置20000
。
sizeof 为您提供指针变量的大小,而不是它指向的区域的大小。
sizeof
是编译时运算符。它只知道指针的大小(这里是 8 个字节),而不知道它所指向的大小。 sizeof
在运行时不存在。