题目是什么意思呢?就是一个函数的输入参数是一个指针,该函数需要改变该指针指向的地址,如: 现在有一个全局数组b,现在需要编写一个函数 输入参数是一个指针a,需要通过该函数将该指针a指向数组b,即:
int b[3] = {
1,2,3};
void fcn(参数);
void main()
{
int* a;
fcn(输入参数a)
}
执行完fcn后,使参数的地址改变,这个功能怎么来实现呢?
首先说明结论:使用二级指针。
为了更好的理解这个问题,我们首先来学习一下指针最经典的例子,交换两个数来说明函数的形参和实参之间的关系。
首先来探究以下实参和形参的关系是怎样的。
形参为普通变量类型;
void test1(int a, int b)
{
printf(">> formal addr a: %d, formal addr b: %d\n",&a,&b); //打印形参地址
printf(">> formal value a: %d, formal value b: %d\n",a,b); //打印形参值
}
int main()
{
int a = 1, b = 2;
printf(">> actual addr a: %d, actual addr b: %d\n", &a,&b);
printf(">> actual value a: %d, actual value b: %d\n",a,b);
test1(a,b);
return 0;
}
下面是执行结果:
>> actual addr a: 6422300, actual addr b: 6422296
>> actual value a: 1, actual value b: 2
>> formal addr a: 6422272, formal addr b: 6422276
>> formal value a: 1, formal value b: 2
可以看到形参和实参的值虽然相同,但是他们的地址却不相同,所以函数在被调用的时候传入的参数(实参)实际上是被复制到另一个地址(形参地址)中去了,函数中对传入参数的操作实际上是对形参地址中的数进行操作,而与实参无关。所以下面的函数不能实现交换两个数的功能。
void swap_1(int a, int b)
{
<