在C语言中,函数的参数不仅可以是整数、小数、字符等具体的基本数据类型,还可以是指向它们的指针。用指针变量作函数参数可以将函数外部变量的地址传递到函数内部,使得在函数内部可以操作函数外部的数据,并且这些修改的数据不会随着函数的调用结束而被销毁。
而像数组、字符串、动态分配的内存等都是一系列数据的集合,没有办法通过某一个参数全部传入函数内部,只能传递它们的指针,在函数内部通过指针来影响这些数据集合。
封装交换变量值得函数,然后调用,代码如下:
#include<stdio.h>
void exchange(int a, int b) {
int temp = a;
a = b;
b = temp;
}
void main(){
int a=2,b=3;
exchange(a,b);
printf("a=%d,b=%d\n",a,b);
}打印结果:a=2,b=3
可以发现,变量a,b的值并没有改变。那是因为调用exchange函数的时候传入了变量a和b的值,该函数在自己的内部重新分配了2个地址空间来存放着两个值,而该函数改变的是自己内部分配的空间的值。并不对外部的变量a,b造成影响。修改代码如下:
#include<stdio.h>
void exchange(int *a, int *b) {
printf("a=%#x,b=%#x\n",a,b);//进入函数,打印指针变量a,b所保存的地址
int temp = *a;
*a = *b;
*b