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;
}

书上说输出是内存中存储Age的地址。

但是这本书并没有谈到这一点:

*pInteger = &Age;
 pInteger = &Age;

这两个任务有什么区别?

4

5 回答 5

6

你似乎被这条线弄糊涂了

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

这里的*符号将 pInteger 声明为指向 int 的指针。这被初始化(未分配)到 Age 的地址,这是允许的,因为 Age 是一个 int。

你可以输入

*pInteger = 45;

这将分配给 pInteger 指向的整数。

您也可以键入

int y = 35; 
pInteger = &y;

这将重新分配指针以指向不同的位置。

于 2013-01-04T12:20:51.583 回答
3

如果你打破这个可能会更容易理解

 int* pInteger = &Age;

分为两步

 int* pInteger;

delares 一个指向 int 类型指针的变量,然后

 pInteger = &Age;

将 Age 的地址分配给 pInteger,因此 pInteger 现在指向一个特定的整数。

如果你写

 *pInteger = 95;

您将为 pInteger 当前指向的任何内容分配一个新值。

当你写

 int* pInteger = &Age;

您正在声明变量并为其赋予初始值,因此这与明显相似的不同

  *pInteger = &Age;

它正在使用 pInteger 但没有声明它,所以在这里你得到 Age 的地址,并有效地尝试将其分配给 pInteger 指向的东西,将地址分配给 int 不是一件好事。

于 2013-01-04T12:22:16.177 回答
2

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

你问的两个是作业:

*pInteger = &Age;
 pInteger = &Age;

不同的是,第一个是非法的,第二个是可以的。那是因为&Agehas type int*,而*pIntegerhas type int,并且将 an 分配给 an 是非法int*intpInteger但是,有 type int*,所以赋值没问题。

于 2013-01-04T12:19:04.037 回答
1

pInteger是一个指向 int 的指针,它在第一种情况下被初始化为的地址(假设你的意思是),并在第二种情况下被赋值。Ageint*pInteger = &Age;

于 2013-01-04T12:19:14.657 回答
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(如果我们的目标是使用像整数值这样的地址)。一元运算符取消引用运算符*意味着我们需要位于指定地址的东西。

于 2013-01-04T12:29:31.997 回答