char* pointer;
pointer = malloc (20000);
printf("%d", sizeof(pointer));
//output: 8
因为我使用malloc预留了20000个字节,所以我期待输出20000。 但是,它返回8.为什么会发生这种情况?
答案 0 :(得分:3)
你必须使用64位系统/操作系统,这就是为什么它为printf打印8(“%d”,sizeof(指针));
当你声明char * p;它将在你的记忆中保留等于sizeof(char *)的空间。
现在如果系统是64位,它将保留8个字节,或者如果它是32位,那么它将保留4个字节。
现在
char* pointer;
pointer = malloc (20000);
当你定义pointer = malloc(20000)时,它将在内存中保留一个20000字节的块,其中指针指向该块的第一个字节,它不会为指针分配20000个字节。
答案 1 :(得分:2)
sizeof
会返回您传递给它的类型的大小
类型为char *
,它只指向大小为20000
的内存位置。
答案 2 :(得分:0)
sizeof
是一个编译时运算符。它只知道指针的大小(这里是8个字节)而不是它指向的大小。 <{1}}在运行时不存在。
答案 3 :(得分:0)
sizeof为您提供指针变量的大小,而不是指向它的区域。