关于函数中参数传递的问题

 

代码开发中,关于程序参数传递的问题,不管程序的参数有多么复杂(指针变量,指针指针的变量),在参数传递过程中,我们都一致把它当做实参传给的是形参的名字,例如:

函数定义:int swapp(int* x, int* y);

假设在主函数main调用swapp(&a, &b),发生的操作是x=&a;y=&b,而不是a=x,b=y,这就是所谓的地址传递;在swapp里面操作的时候

int swapp(int* x, int* y)

{

       Int temp;

       Temp= *x;//这里操作的其实是x指针指向的数据

       *x = *y;

       *y = temp;

}

 

这里由于每个函数都会有自己的堆栈区,所以,上面*x和*y操作的是主函数main分配的栈区,所以swapp执行完毕后,swapp函数的堆栈空间回收,但main函数的堆栈空间还在,所以达到了数据交换的效果。

如果是引用传递(这里注意C里面是不支持引用的,所以如果文件后缀名为*.c的话,那么编译会出错,引用时C++对C的重要扩展,因此只有后缀名为*.cpp才能顺利编译通过)。

函数定义:int swapp(int &x, int &y);

那么在调用的时候swapp(a, b)时发生的操作是编译器没有为参数x和y分配内存,而是用a,b在内存的位置,可以通过下面的例子来说明这个问题:

int main(void)

{

       int a=3;

       int b=7;

       printf("%x,%x\n",&a,&b);

       swapp3(a,b);

       //printf("%d,%d\n",a,b);

       return 0;

}

 

void swapp3(int &x, int &y)

{

       int temp;

       printf("%x,%x",&x, &y);

       temp = x;

       x = y;

       y = temp;

}

以上运行的结果是:

 13ff7c, 13ff78(不同人编译可能地址不一样)

13ff7c, 13ff78

结果是一样的,说明引用并没有为形参分配空间,用的还是实参的空间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值