C语言函数的参数传递的注意事项

C语言函数参数的传递方式有传地址方式和传值方式(c++还有引用传值)。

值传递,就是把你的变量的值传递给函数的形参,实际就是用变量的值来新生成一个形参,因而在函数里对形参的改变不会影响到函数外的变量的值。

地址传递,就是传变量的地址赋给函数里形参指针,使指针指向真实的变量的地址,因为对指针所指地址的内容的改变能反映到函数外,也就是能改变函数外的变量的值。

请看下面两个例子

eg.1   void swap1 (int x,int y)

{

int temp;

temp=x;

x=y;

y=temp;

}//函数的作用是交换两个参数的值

当我们调用这个函数时,发现并不会交换参数的值。原因是什么呢?就是因为函数的传值方式并不会改变实参的值。

eg.2  void swap2(int * x,int *y)

{

int  temp;

temp=*x;

*x=*y;

*y=temp;

    }

这个函数就可以实现两个参数的交换。

明白了以上内容,再看一个实例

eg.3 void swap3(int * x,int * y)

{

int * temp;

temp=x;

x=y;

y=temp;

}

函数的执行结果是什么呢?结果竟然并没有实现两个参数的交换。不是说函数的传地址方式能改变实参的值嘛,指针不就是地址嘛,为什么没有改变实参的值呢。其实不然,指针型也是一种数据类型,也占用内存地址,只不过内存中的内容是所指向的类型的地址。所以,在swap3 这个函数中,参数的传递方式是值传递。

为了便于理解,可以修改eg.3

eg.3_1 

typedef int * INT_P;

void swap3(INT_P x,INT_P y)

{

  INT-P temp;

  temp=x;

  x=y;

  y=temp;

}

这样就和eg.1是一样的。记住,不要看到指针就以为是地址传递,应该视具体情况而定!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值