我正在学习C ++,我在一本书中找到了这个:
#include <iostream>
using namespace std;
int main()
{
int Age = 30;
int* pInteger = &Age; // pointer to an int, initialized to &Age
// Displaying the value of pointer
cout << “Integer Age is at: 0x” << hex << pInteger << endl;
return 0;
}
这本书说输出是存储Age的内存地址。
但是这本书没有谈到这个:
*pInteger = &Age;
pInteger = &Age;
这两项作业有什么区别?
答案 0 :(得分:6)
你好像被这条线搞糊涂了
int* pInteger = &Age; // pointer to an int, initialized to &Age
此处的*
符号将pInteger声明为指向int的指针。这被初始化(未分配)到Age的地址,因为Age是一个int。
您可以输入
*pInteger = 45;
,这将分配给pInteger指向的整数。
您也可以输入
int y = 35;
pInteger = &y;
将重新指定指针指向不同的位置。
答案 1 :(得分:3)
如果你打破这个可能会更容易理解
int* pInteger = &Age;
分为两步
int* pInteger;
将指针的变量指向int,然后
pInteger = &Age;
将年龄的地址分配给pInteger,因此pInteger现在指向一个特定的整数。
如果你写了
*pInteger = 95;
您可以为pInteger当前指向的任何内容分配新值。
写作时
int* pInteger = &Age;
你要声明变量并给它一个初始值,这与显然相似的
不一样 *pInteger = &Age;
使用pInteger但没有声明它所以在这里你得到了Age的地址,并且有效地试图将它分配给pInteger指向的东西,为int分配地址不是一件好事。
答案 2 :(得分:2)
int* pInteger = &Age;
不是作业,而是初始化。在此处,*
是类型的一部分 - int*
,而不是整数*pInteger
,如下所示。
你问的两个是作业:
*pInteger = &Age;
pInteger = &Age;
不同的是,第一个是非法的,第二个是好的。这是因为&Age
的类型为int*
,而*pInteger
的类型为int
,将int*
分配给int
是违法的。但是,pInteger
的类型为int*
,因此分配正常。
答案 3 :(得分:1)
pInteger
是指向int的指针,在第一种情况下初始化到Age
的地址(假设您的意思是 int
*pInteger = &Age;
),并在第二种情况下分配。
答案 4 :(得分:1)
首先,我们声明并初始化int*
int* pInteger = &Age;
//| var type | var name | | value of type "int*" |
接下来我们尝试使用赋值:
pInteger = &Age;
//| var of type "int*" | | value of type "int*" |
*pInteger = &Age;
//| var of type "int" | | value of type "int*" |
在我们将int*
转换为int
之前,最后一次是不正确的(如果我们的目标是使用类似整数值的地址)。一元运算符解除引用运算符*
表示我们需要位于指定地址的某些内容。