C++ pass函数,不传参数,如何修改变量的值

怎样在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)

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值