8.C语言利用指针实现形参反向传值问题

8.利用指针实现形参反向传值问题

利用指针类型的形参进行反向传值需要如下几点:
1.外部实参应定义为实体而非指针,因为外部的实参需要利用实体的空间来存储内部向外传递的数据。(外部若一定要使用指针则看9.利用二维指针实现形参反向传值)
2.内部形参获取到的是外部空间的地址,所以内部不能将形参所存储的地址弄丢了,必须一直让形参存储外部空间的地址。
3.反向传值时,是将被传递数据放入到外部实参的空间中的。为获取外部实参的空间,所以需要对形参进行寻址后再传值。
例如:

/*
fun执行时,e自身有个地址————&e。
因为e是指针所以e存储的是一个另外空间的地址,由于函数调用时外部使用了a作为实参,所以e存储的是外部a的地址,*e则是外部a的存储空间
*/
void fun(int* e)
{
   
    int num = 7;
    

    /*
    如果下面反向传值的赋值语句写为:
        e = #
    则是将num的地址赋值给e,而e原本存储的外部a的地址就被覆盖了,所以达不到反向传值的效果。
    所以
    正确反向传值赋值语句写法为:
        *e = num;
    这样,e存储的一直是a的地址,*e是a的空间,这句赋值语句就将num中的7拷贝到了外部a的空间中
    */
    *e = num;
}

int main()
{
   
    //外部定义为实体,不能定义为指针int* a;定义为实体则a的空间可以用于接收外传的数据
    int a 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值