指针和引用运算符 (&)

Pointers and reference operator (&)

本文关键字:运算符 引用 指针      更新时间:2023-10-16

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

这两个赋值的区别是什么?

你似乎被这一行弄糊涂了

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

这里的*符号将pInteger声明为指向int类型的指针。这被初始化(而不是赋值)为Age的地址,这是允许的,因为Age是int类型。

你可以输入

*pInteger = 45;

,这将赋值给pInteger所指向的整数。

也可以输入

int y = 35; 
pInteger = &y;

将指针重新赋值为指向不同位置

如果你打破这个

可能会更容易理解
 int* pInteger = &Age;

向下分为两步

 int* pInteger;

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

 pInteger = &Age;

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

如果你写

 *pInteger = 95;

你将给pInteger当前指向的任何值赋一个新值。

 int* pInteger = &Age;

你是在声明变量并给它一个初始值,所以这与明显相似的

不同
  *pInteger = &Age;

它使用了pInteger,但没有声明它所以这里你得到了Age的地址并试图将它赋值给pInteger所指向的对象,将地址赋值给int不是一件好事

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

你问的两个是作业:

*pInteger = &Age;
 pInteger = &Age;

区别在于第一个是非法的,第二个是可以的。这是因为&Age的类型是int*,而*pInteger的类型是int,将int*赋值给int是非法的。然而,pInteger的类型是int*,所以赋值是可以的。

pInteger是指向int的指针,在第一种情况下初始化为Age的地址(假设您指的是 int *pInteger = &Age;),在第二种情况下赋值为

首先声明并初始化一个类型为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(如果我们的目标是使用像整数值一样的地址)。一元操作符解引用操作符*意味着我们需要位于指定地址的东西