【发布时间】:2015-02-19 06:10:50
【问题描述】:
#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 位机器怎么办?另外,如果我更换会发生什么 带双 *p 的 int *p 和 (int *)malloc(20) 与 (double *)malloc(20)?
【问题讨论】:
-
您的问题是“指针的大小是多少”。指针指向的位置对此没有影响;变量具有固定大小。
-
在我的 64b Ubuntu 上,
p的大小为 8 个字节,... -
@MattMcNabb 嗯,你的意思是“指针变量有固定大小”吗?
-
@ring0 如果它的 32 位系统大小是 4 个指针,而 64 位它的 8 个指针是正确的。这里他的构建必须是 32 位,即使他的操作系统是 64 位。不是吗?
-
@ring0 不,所有变量。 (它们在创建后不会改变大小)
标签: c memory allocation