直接上图
答案是第三个,有点看不懂,*p和**p什么的,真的太绕了
在注释中说明,复制到编译器查看较好。
从main方法开始逐行看,到调用方法的时候再看f方法中的语句。
如果有其他问题可以私信,看到就会回。
#include<stdio.h>
int k = 7;
int m = 5;
void f(int ** s)
{
//t指针中存储的是:k变量的地址
int *t = &k;
//s中存储的是:一级指针变量t的地址
s = &t;
//*s,解引用找到二级指针中存储的t变量的地址。
//相当于t=&m ,也就是说t中存储的是m变量的地址。
*s = &m;
//k=7,*t解引用找到t中存储的变量m=5,
//**s:*s找到其中存储的地址,找到t变量,再*,通过t中存储的地址找到变量m
//7 5 5
printf("%d %d %d ",k,*t,**s);
}
int main() {
int i = 3;
//p是int类型指针变量,其中存储的是int类型变量i的地址。
//*表示p是一级指针变量。
int * p = &i;
//r也是int类型指针变量,**表示r是二级指针,其中存储的是:一级int类型指针变量。
int ** r = &p;
//将r传入f方法中
f(r);
//i=3
//p中存储的是i的地址,*p=3
//**r:*r找到其中存储的p变量,再*,通过p中存储的地址找到白能量i
//3 3 3
printf("%d %d %d\n",i,*p,**r);
return 0;
}
关于指针这一块的所有东西,在我的指针相关文章中都有讲解。都是在语句上的注释说明。