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 //-------------------------------------------------------
原文:http://www.cnblogs.com/H-Col/p/3704427.html