写一个简单交换两个变量值的函数,我们要理解C语言中参数传递的机制.
C语言中的函数参数默认是按值传递,也就是说,如果我写一个函数,如
void swap(int a,int b)
{int tmp = a;a = b;b = tmp;
}
然后在函数内部交换a,b的值,这不会影响到函数外部的变量,因为传递的是值的副本.
就像这样,运行后a,b值并没有交换成功
void Swap(int a, int b)//没有交换成功,错误函数
{ //仅仅同名int tmp = a;a = b;b = tmp;
}
int main()
{int a, b;//这俩a仅仅同名scanf("%d%d", &a, &b);printf("交换前:%d,%d\n", a, b);Swap(a, b);//交换a,bprintf("交换后:%d,%d\n", a, b);return 0;
}
正确的做法应该是使用指针,通过传递变量的地址,函数可以修改实际变量的值.如下:参数是整形指针,然后在函数内部通过接引用来交换值.
void Swap(int*p1, int*p2)
{ int* tmp;tmp = p1;p1 = p2;p2 = tmp;}
int main()
{int a, b;scanf("%d%d", &a, &b);printf("交换前:%d,%d\n", a, b);Swap(&a, &b);printf("交换后:%d,%d\n", a, b);return 0;
}
总结:一个函数A通过调用函数B,来达到修改A中变量的值
1.必须传指针;
2.在B中必须解引用.
上面为解决很多指针问题非常非常重要的点