以两个整数的交换为例
- #import <Foundation/Foundation.h>
- #import <stdio.h>
- // 利用值传递进行两个整数的交换的函数
- void changeByValue(int a, int b)
- {
- int tmp;
- tmp = a; // 交换两个数
- a = b;
- b = tmp;
- }
- // 利用指针进行地址传递交换两个整数的函数
- void changeByPoint(int *a,int *b)
- {
- int tmp;
- tmp = *a;
- *a = *b;
- *b =tmp;
- }
- int main()
- {
- int a = 4, b = 5;
-
- changeByValue(a,b);
- // 打印调用值传递函数后a,b的值
- printf("After call changeByValue:a = %d,b = %d\n",a,b);
-
- changeByPoint(&a,&b);
- // 打印地址传递函数后a,b的值
- printf("After call changeByPoint:a = %d, b = %d\n",a,b);
- }
复制代码
打印结果为:
After call changeByValue:a = 4,b = 5
After call changeByPoint:a = 5, b = 4
值传递的过程中 changeByValue函数得到的a,b只是原来变量a,b的拷贝,虽然在函数内部交换了a,b的值,但是事实上并没有改变a,b变量的值
而利用地址传递,顾名思义传递的是变量地址,所以在changeByPoint函数中,利用*操作符,操作的是存放变量a,b的内存地址上的东西。
感觉重点是不要被变量的名称迷惑即使都叫a,b,但是所对应的内存地址是不同的。 |