这是一个关于C语言的指针问题

图片说明

划红线部分,描述了指针变量取地址地址还是自己的值。我很不理解,为啥这样
为什么指针变量和其地址相同呢?很奇怪

这里的理解可能会混淆,但是并没有什么错。单独一个=号 的意思是赋值,但这里还有值等于的意思。
作者的编写也不是很规范易于理解。
你只要记住*是取值,&是取址就行。被取址就变指针,用来指向地址。被取值就会拿到地址上存的值。
从你划红线那行开始 &p=2000就表示p指针的指针的值是2000,就是存放p指针的地址是2000.以上面的描述已经脱离。
这里要表达意思&p可以是值2000的意思,它是由指针的指针来存储(指向指针p)即**p=&p=2000
然后下一条*&p=2000才对,就是*(**p)意为取**p的值,**p的值=&p=2000

网上有些东西也不是全对的,从你给出来的条件来看,像你这个给出来的图片来看p=&a,而且a是正常变量,P是指针变量p=&a=2000,那么&p就是指针的指针了,绝对不可能&p=2000的
这里是写错了,你可以不用管

注意,虽然都是&引用和指针取地址完全不是一回事。(好比乘法和指针求值都是*,但是没有一毛钱关系)
按照表格的标题,作者应该说的是这个意思,如果是引用而不是取地址的话。
这是C++的写法,不是C语言的。

#include <iostream>

using namespace std;

int main() {
    int a = 1;
    int& p = a;
    p = 2000;
    cout << a;
    return 0;
}