函数参数的传值与传址
在如下的主函数里面调用swap函数,问哪一个才能正确交换a,b两变量的值? int main() { int a=3,b=5; int *pointer_1 = &a; int *pointer_2 = &b; swap(pointer_1,pointer_2); printf("%d %d",*pointer_1,*pointer_2); return 0; } /** swap1是正确的,通过地址传递参数,令pointer_1和pointer_2两个指针变量所指向的变量的值发生了改变。 */ swap1(int *p1,int *p2) { int temp; temp = *p1; *p1 = *p2; *p2 = temp; } /** swap2运行时,系统容易出问题。其实它在原理上是正确的,和swap1一样,但是*temp是指针变量temp所指向的变量(该变量应该是系统中 已经存在的了),但temp中并没有确定的地址值,它的值是不可预见的,故*temp所指向的单元也是不可预见的。因此,对*temp赋值可能会破 坏系统的正常工作状况。所以还是要像swap1一样,重新定义一个临时变量temp。 */ swap2(int *p1,int *p2) { int *temp; *temp = *p1; *p1 = *p2; *p2 = *temp; } /**