#include<stdio.h>
#include<stdlib.h>
int main()
{
int *p;
p = (int *)malloc(20);
printf("%d\n", sizeof(p));
free(p);
return 0;
}
在我的 64 位机器上,4 被打印为 p 的大小。我假设这是因为整数在内存中占用 4 个字节,而 p 是一个整数指针。如果我运行的是 32 位机器怎么办?另外,如果我更换会发生什么 int *p 与 double *p 和 (int *)malloc(20) 与 (double *)malloc(20)?
最佳答案
你的假设是错误的。
在 printf("%d\n", sizeof(p));
中,您没有打印 integer
的大小。您在此处打印 sizeof '指向整数的指针',其中在你的情况下是 4 个字节。很可能你会在 32 位机器上得到相同的结果。
现在关于malloc
,它分配字节
的数量并返回指向它的指针。因此,即使您从转换指针,也会分配相同大小的内存int*
到 double*
。
关于c - 32 位机器上的 Malloc 和大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28599706/