指针和参考运算符(&)

时间:2013-01-04 12:17:21

标签: c++ pointers

我正在学习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;

这两项作业有什么区别?

5 个答案:

答案 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之前,最后一次是不正确的(如果我们的目标是使用类似整数值的地址)。一元运算符解除引用运算符*表示我们需要位于指定地址的某些内容。