由malloc分配的指针的大小


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给出的是指针变量的大小,而不是它所指向的区域的大小。

相关内容

  • 没有找到相关文章

最新更新