2013-01-04 34 views
0

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

书中说,输出是其中年龄存储在内存中的地址。

但是,这本书不谈论这个:

*pInteger = &Age; 
pInteger = &Age; 

是什么这两个任务之间的区别?

+0

'&'符号与类型一起使用时,声明一个引用。与变量一起使用时,返回变量的地址或位置。例如:'int&' - 声明一个引用; “&Age” - “Age”的返回位置。 –

回答

6

你似乎被这条线

int* pInteger = &Age; // pointer to an int, initialized to &Age 

这里的*符号声明pInteger为指向int混淆。这是初始化(未分配)的年龄是允许的地址,因为年龄是一个整数。

您可以键入

*pInteger = 45; 

和将被分配给整到pInteger点。

您也可以键入

int y = 35; 
pInteger = &y; 

这将被重新分配指针指向一个不同的地方。

2

int* pInteger = &Age;不是一个赋值,而是一个初始化。这里,*是类型的一部分 - int*,而不是整数*pInteger,如下所示。

你问这两个任务是:

*pInteger = &Age; 
pInteger = &Age; 

不同的是,第一个是非法的,第二个是确定。这是因为&Age的类型为int*,而*pInteger的类型为int,因此将int*分配给int是非法的。但是,pInteger的类型为int*,因此分配是确定的。

1

pInteger是int的指针,它是在第一种情况下初始化到的Age地址(假设你的意思int*pInteger = &Age;),和在第二种情况下分配

3

它可能会更容易些,如果你打破了这个

int* pInteger = &Age; 

分为两个步骤

​​

了解delares类型的指针变量为int,然后

pInteger = &Age; 

将Age的地址赋给pInteger,所以pInteger现在指向一个特定的整数。

如果你写

*pInteger = 95; 

你会分配给任何pInteger当前指向一个新的价值。

当你写

int* pInteger = &Age; 

您声明变量并给它一个初始值,所以这是不一样的明显相似

*pInteger = &Age; 

这是使用pInteger但不宣布它所以在这里你得到Age的地址,并且正在有效地试图将它分配给pInteger指向的东西,给int分配一个地址并不是一件好事。

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(如果我们的目标是使用像整数值一样的地址)。一元运算符解引用运算符*意味着我们需要位于指定地址处的东西。