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