1.首先指针的传递是双向的,它不同于单纯的函数(没有指针变量作为函数参数)。单纯的函数只能由实参传递给形参。
2.C语言中的实参变量和形参变量之间的数据传递是单向的“值传递”,用指针变量作函数参数同样遵循这一规则。
就上述2点,我会分别举出例子。
1.写一个将2个变量值互换的函数。
void swap(int x,int y)
{
int temp;
temp=x;
x=y;
y=temp;
}
图1
如果在main函数中调用swap函数:swap(a,b) (假设a=2,b=3)
a,b是实参,x,y是形参。a->x,b->y(实参传递给形参)。此时x=2,y=3,然后经过swap函数,y=2,x=3。但是它不会返回给实参,也就是说a,b的值不变。那么你写这个函数就无实际意义。
所以我们就要用指针
2.怎么改?
下面是改正的函数
void swap(int *x,int *y)
{
int temp;
temp=*x;
*x=*y;
*y=temp;
}
图2
为了解
释上面的第2点“值传递”,再改一下。
void swap(int *x,int *y)
{
int *temp;
temp=x;
x=y;
y=temp;
}
图3
这样改是不行的,因为它不是“值传递”,temp,x,y它们是指针变量,里面存放的是地址。
而*x,*y是指向变量的指针变量,你可以把它理解为普通的变量。像int a,int b中的a,b一样。可以存放数据(一个值),所以它们可以“值传递”。
可以看到,图2与图3中的temp有所区别,图2中的temp是普通的变量,可以存放一个值,图3中的temp是一个指针变量,用来存放地址。
希望你们能理解!