malloc分配的指针大小

char* pointer; pointer = malloc (20000); printf("%d", sizeof(pointer)); //output: 8 

因为我使用malloc预留了20000个字节,所以我期待输出20000。 但是,它返回8.为什么会发生这种情况?

你必须使用64位系统/操作系统,这就是为什么它为printf打印8(“%d”,sizeof(指针));

当你宣布char * p; 它将在你的记忆中保留等于sizeof(char *)的空间。

现在,如果系统是64位,它将保留8个字节,或者如果它是32位,那么它将保留4个字节。

现在

 char* pointer; pointer = malloc (20000); 

当你定义pointer = malloc(20000)时,它将在内存中保留一个20000字节的块,其中指针指向该块的第一个字节,它不会向指针分配20000个字节。

sizeof返回传递给它的类型的大小。
类型是char * ,它只指向大小为20000的内存位置。

sizeof是一个编译sizeof算符。 它只知道指针的大小(这里是8个字节),而不是它指向的大小。 sizeof在运行时不存在。

sizeof给出指针变量的大小,而不是它指向的区域的大小。