一级指针与二级指针

void swap(int *x,int *y)

{


}

void swap2(int **m,int **n)

{

int *x;

x=*m;

*m=*n;

*n=x;

}


void main()

{

int a=1,b=2,*p=&a,*q=&b;

swap(p,q);

printf("%d,%d,%d,%d\n",a,b,*p*q);

swap2(&p,&q);

printf("%d,%d,%d,%d\n",a,b,*p*q);

}

int *p=&a,变量p中存放的是a的地址,p=&a,解引用之后,*p=a

对于二级指针

int **m=&p,表示变量m中存放的是p的地址,m=&p,*m=p,*m=&a

m带上两个*号也是表示m是一个指针变量,只不过m中放的这个变量的地址,这个变量本身也是一个地址

如上将p的地址传入进去,如果下述操作对p的地址中存放的值发生更改,

(p的地址用m变量表示,p的地址中的值通过解引用*m来表示)

也就是传进来的是p的地址,地址中的值*m发生了改变,相当于主函数中的该地址中的值会发生改变

这个是地址传参

那么主函数中 p的地址中的值也会发生改变

x=*m;

*m=*n;

*n=x;

地址中的值发生改变,即&a=&b,&b=&a

a变量指向b变量的地址,所以a,b值互换

所以对于这种题,如果传进来的是一个地址,那么找程序中有没有对该地址中的值进行操作的步骤


猜你喜欢

转载自blog.csdn.net/chengchaonan/article/details/80743090