【发布时间】:2020-03-02 10:06:28
【问题描述】:
我正在研究指针,发现指针的大小不正确。
我了解到,由于p_num 是一个指向 int 的指针,它应该显示 4 个字节,但实际上显示的是 8 个字节。
可能的原因是什么?
#include <stdio.h>
int main()
{
int num = 0;
int * p_num = NULL;
num = 10;
printf("num address: %p\n", &num);
printf("num size: %zd\n", sizeof(num));
printf("num value: %d\n\n", num);
p_num = #
printf("p_num address: %p\n", (void*)&p_num);
printf("p_num size: %zd\n", sizeof(p_num));
printf("p_num value: %p\n", p_num);
printf("p_num value pointed: %d\n", *p_num);
return 0;
}
输出:
num address: 0x7fffcb0e8ffc
num size: 4
num value: 10
p_num address: 0x7fffcb0e8ff0
p_num size: 8
p_num value: 0x7fffcb0e8ffc
p_num value pointed: 10
【问题讨论】:
-
您使用的是 64 位系统吗?那么指针通常是 64 位(即 8 个字节)。为什么你认为指针应该是 4 字节(32 位)?
-
指针指向的对象类型与指针的大小无关;指针必须足够大以容纳系统可能使用的任何地址 - 在您的情况下(可能是 64 位系统)大小为 8 个字节。
-
是的,我在 64 位机器上测试。
-
我了解到,由于
p_num是指向int的指针,它应该显示4 个字节 你从哪里了解到的?因为那完全是错误的。 -
不同的类型有不同的大小。并且“指向
int的指针”(int *)是与int不同的类型。