黑马程序员技术交流社区
标题:
日课2 C语言之值传递与地址传递
[打印本页]
作者:
黑白世界
时间:
2015-9-23 10:08
标题:
日课2 C语言之值传递与地址传递
C语言的函数传参分为值传递和地址传递两种,这两种传参方式的区别在于,值传递方式不会改变实参的值,而地址传递会改变实参的值。
具体说来:
1.基本参数类型的形参都是值传递,函数体不能改变实参的值。
void test1( int n){
n = 100;
}
int a = 50;
test1(a);
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.可以通过指针实现地址传递,在函数体内改变实参的值。
void test2 (int *n){
*n=100;
}
int b = 50;
test(&b);
printf("%d",b); //输出结果是100
复制代码
地址传递可以实现一个 函数返回多个结果,在函数体内就可以改变函数外的实参的值。比如下边是一个没有返回值的函数,但是它却可以同时得到两个数的和与差:
void test3(int n1,int n2,*sum,*dif) {
*sum = n1 + n2;
*dif = n1 - n2;
}
int a = 20;
int b = 15;
int sum;
int dif;
test3(a,b,&sum,&dif);
printf("a与b的和是:%d\n",sum);
printf("a与b的差是:%d\n",dif);
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2