为什么未引用的指针具有不同于dereferenced的不同大小 - C ++

时间:2016-07-03 09:29:13

标签: c++ pointers sizeof

所以这是我的代码:

cout << "The size of an integer is " << sizeof(int) << endl;
cout << "The size of a double is " << sizeof(double) << endl;
cout << "The size of a string is " << sizeof(string) << endl;
int num = 1234;
cout << "The size of a num is " << sizeof(num) << endl;
int *pnum = &num;
cout << "The size of a pointer pnum is " << sizeof(pnum) << endl;
cout << "The size of a value pointed at by pnum is " << sizeof(*pnum) << endl;
return 0;

我对这段代码很困惑,因为它的输出是:

The size of an integer is 4
The size of a double is 8
The size of a string is 40
The size of a num is 4
The size of a pointer pnum is 8
The size of a value pointed at by pnum is 4

我认为指针pnum的大小应该与pnum指向的值相同,因为我正在观看教程“Programming C ++”,在本教程中它们是相同的。有人可以解释为什么他们在我的程序中不一样吗?

2 个答案:

答案 0 :(得分:2)

sizeof(pnum)sizeof(int*)完全相同,表示指向int值的指针所需的字节数。这样的指针在64位系统中占用64位,如代码输出所示,为8字节。

与此同时,sizeof(*pnum)sizeof(int)完全相同,因为*pnum的类型为int。这种类型通常是32位长,它给我们4个字节。

答案 1 :(得分:1)

  

在本教程中它们是相同的:

原因可能是那台特定的机器(比如我自己的32位机器)sizeof(int)= sizeof(int *)= 4.

你得到不同结果的原因是*pnumpnum的指针,它是一个int(你的机器上有4个字节)而pnum本身就是一个指针(8个字节以上)你的机器)