&b和b有什么区别?(b is并且声明如下:int * b)

时间:2019-01-28 17:38:25

标签: c++

我试图找出*和&的工作原理。

我已经读过有关这件事的信息,但是我真的找不到为什么&b和b具有2个不同的地址。我也不知道b和k(它们每个都有什么属性)之间有什么区别。我看到它们以相同的方式工作。(如果您修改a,b或k之一,它们都将被修改)

int a = 2;    
int *b = &a;    
int &k = a;    
cout << k << endl;// 2    
cout << *b << endl;// 2    
cout << &b << endl;// address 1    
cout << b << endl; // address 2    
a = 10;    
cout << k << endl;// 10    
cout << *b << endl;//10    
cout << &b << endl;//address 1    
cout << b << endl;// address 2    
*b = 20;    
cout << k << endl;// 20    
cout << *b << endl;// 20    
cout << &b << endl;// address1    
cout << b << endl;// address2    
k = 30;    
cout << k << endl;// 30    
cout << *b << endl;// 30    
cout << &b << endl;//address1    
cout << b << endl;//address2

我期望b和&b具有相同的地址

1 个答案:

答案 0 :(得分:1)

  

&b和b有什么区别?

b是一个表达式。更具体地说,它是一个id表达式。标识符b命名一个变量。变量的类型为int*,即指向整数的指针。 id表达式的结果是一个左值。

&b是一个表达式。更具体地说,它是操作的地址。运算符&的地址是一元的,即它具有一个操作数。在这里,操作数是id表达式b。 addressof操作的结果是prvalue。返回的值将是左值操作数存储的地址。值的类型为T*,其中T是操作符的类型。在这种情况下,结果类型将为int**,即指向整数的指针。 addressof运算符是间接运算符*的逆。

  

我期望b和&b具有相同的地址

没有理由期待。 b指向a,而&b指向b。由于ba是单独的对象,因此它们也具有单独的地址,并且相应的值b&b必须不同。

b&b可以指向同一对象的唯一情况是:

void *b = &b;