码迷,mamicode.com
首页 > 编程语言 > 详细

C语言函数参数传递方式

时间:2015-10-26 00:40:28      阅读:199      评论:0      收藏:0      [点我收藏+]

标签:

      C语言中函数的参数传递方式有两种:传值、传地址。

      1.传值调用

      在被调用函数中开辟出一个临时的内存空间,在主调用函数进入被调用函数前,会将实参进行拷贝,拷贝的数据放在该临时内存空间中,供被调用函数使用。当被调用函数返回时,该临时内存空间即被释放。

 1 #include<stdio.h>
 2 
 3 int test_func(char *q)
 4 {
 5     long lAddr=&q;       // 被调用时,光标选中“&q”,显示结果(随机)为:0x002df7ac {0x013058b8 "world"},
 6     q="Hello";           // 即此时,q的地址“&q”为:0x002df7ac,而q本身指向:0x013058b8 "world",与实参p指向相同。
 7     return 0;            
8 } 9 10 void main(void) 11 { 12 char *p="world"; 13 long lAddr=&p; // 断点时选中“&p”,显示:0x002df88c {0x013058b8 "world"}, 14 test_func(p); // 即此时p的地址“&p”为:0x002df88c,而p本身指向:0x013058b8 "world" 15 16 printf("%s\n"); // 最终输出为“world” 17 }

      2.传地址调用

      把主调用函数中开辟的某个内存空间的(首)地址传递给被调用函数,被调用函数可以读写该内存空间。当被调用函数返回后,该内存空间仍然存在,主调用函数会继续使用它。

 1 #include<stdio.h>
 2   
 3 int test_func(int *x,int *y)    // 被调用时, 光标选中“x”,显示(随机):0x0039f934 {3};选中“y”,显示:0x0039f928 {9}
 4 {
 5     int temp;
 6       
 7     temp=*x;
 8     *x=*y;            // 这里,内存地址未发生变化,但其中的值进行了交换。
 9     *y=temp;
10  
11     return 0;
12 }
13 
14 int main(void)
15 {
16     int x=3;
17     int y=9;
18  
19     printf("x=%d,y=%d\n",x,y);    // x=3,y=9
20     test_func(&x,&y);             // 断点时,光标选中“&x”,显示(随机):0x0039f934 {3};选中“&y”,显示:0x0039f928 {9}
21     printf("x=%d,y=%d\n",x,y);    // x=9,y=3
22          
23     return 0;
24 }

http://zhidao.baidu.com/link?url=4BPJ44dGW_2ok9hDUWIOW9SRHhWpYXb7YTyBzuip8LzYgAFuHHEHeAgMn5JhgpgRkBXKXg6lmN4c5IesfDMv5K

  

C语言函数参数传递方式

标签:

原文地址:http://www.cnblogs.com/tianlang358/p/4910065.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!