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 //-------------------------------------------------------
时间: 2024-12-28 08:49:36