我试图找出*和&的工作原理。
我已经读过有关这件事的信息,但是我真的找不到为什么&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具有相同的地址
答案 0 :(得分:1)
&b和b有什么区别?
b
是一个表达式。更具体地说,它是一个id表达式。标识符b
命名一个变量。变量的类型为int*
,即指向整数的指针。 id表达式的结果是一个左值。
&b
是一个表达式。更具体地说,它是操作的地址。运算符&
的地址是一元的,即它具有一个操作数。在这里,操作数是id表达式b
。 addressof操作的结果是prvalue。返回的值将是左值操作数存储的地址。值的类型为T*
,其中T
是操作符的类型。在这种情况下,结果类型将为int**
,即指向整数的指针。 addressof运算符是间接运算符*
的逆。
我期望b和&b具有相同的地址
没有理由期待。 b
指向a
,而&b
指向b
。由于b
和a
是单独的对象,因此它们也具有单独的地址,并且相应的值b
和&b
必须不同。
b
和&b
可以指向同一对象的唯一情况是:
void *b = &b;