A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

C语言的函数传参分为值传递和地址传递两种,这两种传参方式的区别在于,值传递方式不会改变实参的值,而地址传递会改变实参的值。
具体说来:
1.基本参数类型的形参都是值传递,函数体不能改变实参的值。
  1. void test1( int n){
  2.     n = 100;
  3. }
  4. int a = 50;
  5. test1(a);
  6. printf("%d",a);  //输出的值是50
复制代码
正如以上的程序输出结果一样,实参a的值并没有被函数test1改变,分析如下:
        1>在main的栈区有一个内存空间存放变量a;
        2>在test1的栈区有一个内存空间存放变量n;
        3>调用函数test1(a)的时候,由于是指传递,a的值赋给了n,此时n=a=50.
        4>函数执行,n=100,这个过程并没有改变a的值。

2.可以通过指针实现地址传递,在函数体内改变实参的值。
  1. void test2 (int *n){
  2.     *n=100;
  3. }
  4. int b = 50;
  5. test(&b);
  6. printf("%d",b);  //输出结果是100
复制代码
地址传递可以实现一个 函数返回多个结果,在函数体内就可以改变函数外的实参的值。比如下边是一个没有返回值的函数,但是它却可以同时得到两个数的和与差:
  1. void test3(int n1,int n2,*sum,*dif) {
  2.     *sum = n1 + n2;
  3.     *dif = n1 - n2;
  4. }
  5. int a = 20;
  6. int b = 15;
  7. int sum;
  8. int dif;
  9. test3(a,b,&sum,&dif);
  10. printf("a与b的和是:%d\n",sum);
  11. printf("a与b的差是:%d\n",dif);
复制代码





0 个回复

您需要登录后才可以回帖 登录 | 加入黑马