C++ 萌新想请教下指针问题

int main(int argc, char* argv[]){
    int a = 50;
    int* _a = &a;
    *_a = 500;
    cout << a << endl;
    return 0;
}
================================
console output: 500

===========================

上面这段是指针_a指向a的内存地址并改值.
前面声明的时候加了 int* _a = &a,
1、为什么不能直接‘_a = 500’
2、为什么_a前面加一个*才能重新赋值(‘*_a = 500’), 请懂的人讲下, 不甚感激!

你可以把int*作为一个数据类型,_a作为变量表示的是一个地址,所以实际是对_a进行赋值a的地址,所以用 取地址符&。

懂了上面的,你的问题就容易解决了。

1、_a表示地址,相当于_a是一个箱子,里面装的是a的地址,直接赋值_a 只能修改它指向的地址,不能修改变量a的值。

2、*的作用就相当于把箱子_a打开,取出里面的地址并找到该地址的变量,此时就能直接赋值了。

你直接int _a=500,这相当于重新定义了一个int变量了,没法修改a的值。 int* _a = &a相当于定义一个指针变量,并初始化成a的地址