怎样在pass()函数中不传参数,添加代码,让main()函数中第二次打印的a变成333...

先来看代码:

void pass(){
    int b=333;
    int *p=&b;
    while(*p!=222){
        p++;
        cout<<"address: "<<p<<endl;
    }
    *p=333;
    return;
}


int main(){
    
    int a=222;
    cout<<a<<endl;
    cout<<"address: "<<&a<<endl;
    pass();
    cout<<a<<endl;
    cout<<"address: "<<&a<<endl;

    system("pause");
    return 0;
}

再来看一下运行的结果:

分析一下过程:

(1)为什么可以这样修改?

因为所有的局部变量,均是在栈上申请空间,而pass函数又在main函数之中进行调用,那么实际上,公用一个栈上进行变量的操作。

(2)如何进行修改呢?

在pass中重新申请一个变量,之后申请一个指针进行地址相连,之后遍历到a变量的地址上,此后通过指针来进行值的修改。

(3)为什么跑出来的结果,地址是这样的趋势呢?

由于栈空间的生长方向,是从高地址到低地址进行生长,而p++的含义,指的是不断的取向下一个位置,因此,是从高地址往低地址进行搜寻(我的系统是64位,因此两两之间的地址差值为4*8=32)