首页 > 代码库 > C语言参数传递

C语言参数传递

 1 //--------------------单向值传递------------------------
 2 
 3 // swap这个方法在被调用时,给形参a,b分配了空间
 4 // 主调函数将【数值】传递给【形参】
 5 // 形参完成操作之后并不能将值传回给主调函数
 6 // 形参的生命周期仅仅在方法体中
 7 /* void swap(int a , int b)
 8     {
 9         int tmp = a;
10         a = b;
11         b = tmp;
12     }*/
13 //-----------------------验证程序------------------------
14 /*    
15     int x(6) , y(7);
16     cout << "交换值以前的地址:x=" << &x << "y=" << &y << endl;
17     cout << "交换值以前的值:x=" << x << "y=" << y << endl;
18     swap(x , y);
19     cout << "交换值以后的地址:x=" << &x << "y=" << &y << endl;
20     cout << "交换值以后的值:x=" << x << "y=" << y << endl;
21 */
22 //-------------------------------------------------------
23 
24 //--------------------单向值(指针)传递------------------------
25 // 同值传递是一个道理
26 // 传进来的指针变量被形参接收
27 // 形参在执行完方法之后无法传回主调函数中
28 //void swap(int *a , int *b)
29 //{
30 //    int *tmp = a;
31 //    a = b;
32 //    b = tmp;
33 //}
34 //-----------------------验证程序------------------------
35 /*    
36     int x(6) , y(7);
37     cout << "交换值以前的地址:x=" << &x << "y=" << &y << endl;
38     cout << "交换值以前的值:x=" << x << "y=" << y << endl;
39     swap(&x , &y);
40     cout << "交换值以后的地址:x=" << &x << "y=" << &y << endl;
41     cout << "交换值以后的值:x=" << x << "y=" << y << endl;
42 */
43 //-------------------------------------------------------
44 
45 //--------------------地 址 传 递------------------------
46 
47 // 形参接收到了主调函数传递的参数
48 // 形参a将主调函数传递过来的【指针变量】指向的【内存地址】的【数值】赋予被调函数中的临时变量tmp
49 // 形参b将【指针变量】指向的【内存空间】中的【数值】赋予形参a存储的【指针变量】指向的【内存空间】
50 // 临时变量tmp将【数值】赋予形参b存储的【指针变量】指向的【内存空间】
51 // 因为是【直接】对【指针变量】指向的【内存空间】中的【数值】进行修改,所以达到了所谓的双向传值
52 //void swap(int *a , int *b)
53 //{
54 //    int tmp = *a;
55 //    *a = *b;
56 //    *b = tmp;
57 //}
58 //-----------------------验证程序------------------------
59 /*    
60     int x(6) , y(7);
61     cout << "交换值以前的地址:x=" << &x << "y=" << &y << endl;
62     cout << "交换值以前的值:x=" << x << "y=" << y << endl;
63     swap(&x , &y);
64     cout << "交换值以后的地址:x=" << &x << "y=" << &y << endl;
65     cout << "交换值以后的值:x=" << x << "y=" << y << endl;
66 */
67 //-------------------------------------------------------
68 
69 //---------------动态分配内存空间实现值交换----------------
70 // 定义俩指针变量x,y
71 // 分别对他们进行动态分配内存空间
72 // x , y 仅为1字节的指针变量,指向了两个分配好的空间上
73 // 将x,y的值进行互换者达到了交换值的效果
74 /*
75 int* x ,* y;
76 
77 x = (int*)malloc(sizeof(int));
78 y = (int*)malloc(sizeof(int));
79 
80 *x = 6;
81 *y = 7;
82 
83 cout << "交换值以前的地址:x=" << x << "y=" << y << endl;
84 cout << "交换值以前的值:x=" << *x << "y=" << *y << endl;
85 
86 int *tmp;
87 tmp = x;
88 x = y;
89 y = tmp;
90 
91 cout << "交换值以后的地址:x=" << x << "y=" << y << endl;
92 cout << "交换值以后的值:x=" << *x << "y=" << *y << endl;
93 */

还有一点没弄明白就是如下代码在【静态分配内存】的时候为什么不能用改变【内存空间】的【地址】来达到【数值】交换的效果???!!!

看官有和妙解请不吝赐教..

 1 //--------------------单向值(指针)传递------------------------
 2 // 同值传递是一个道理
 3 // 传进来的指针变量被形参接收
 4 // 形参在执行完方法之后无法传回主调函数中
 5 //void swap(int *a , int *b)
 6 //{
 7 //    int *tmp = a;
 8 //    a = b;
 9 //    b = tmp;
10 //}
11 //-----------------------验证程序------------------------
12 /*    
13     int x(6) , y(7);
14     cout << "交换值以前的地址:x=" << &x << "y=" << &y << endl;
15     cout << "交换值以前的值:x=" << x << "y=" << y << endl;
16     swap(&x , &y);
17     cout << "交换值以后的地址:x=" << &x << "y=" << &y << endl;
18     cout << "交换值以后的值:x=" << x << "y=" << y << endl;
19 */
20 //-------------------------------------------------------