c语言二级指针问题
#include<stdio.h>intk=7,m=5;voidf(int**s){int*t=&k;s=&t;*s=&m;printf("%d,%d,%d,",k,*t...
#include<stdio.h>
int k=7,m=5;
void f(int **s)
{ int *t=&k;
s=&t; *s=&m; printf("%d,%d,%d,",k,*t,**s);
}
main()
{ int i=3,*p=&i,**r=&p;
f(r);
printf("%d,%d,%d,",i,*p,**r);
}为什么答案是7,5,5,3,3,3 展开
int k=7,m=5;
void f(int **s)
{ int *t=&k;
s=&t; *s=&m; printf("%d,%d,%d,",k,*t,**s);
}
main()
{ int i=3,*p=&i,**r=&p;
f(r);
printf("%d,%d,%d,",i,*p,**r);
}为什么答案是7,5,5,3,3,3 展开
1个回答
展开全部
7——k的值
5——s=&t,s是t的地址,即s指向的内容是t(一个指向整型变量的指针);
*s=&m,s指向的内容是m的地址,又因为s指向的内容是t,所以t的值改变成为m的地址,即t 指向的内容为m(一个整型变量),因此*t(t指向的内容)的值为5
5——**s=*(*s)=*t
3——i的值
3——int *p=&i 等价于 int *p;(定义一个整形指针p)p=&i;(p的值为i的地址),所以*p的值为3
3——int **r(定义一个指针r,r指向的内容是一个整形指针),r=&p(r的值为p的地址,即r指向的 内容是一个整形指针p,其中p的值是i的地址)**r=*(*r)=*p
说的不太清楚请见谅,我指针也是属于一知半解,不过因为指针直接访问内存,所以请一定理解好它,否则以后编写C语言的程序很容易造成编译器检查不出的错误导致大范围的人工查错。
5——s=&t,s是t的地址,即s指向的内容是t(一个指向整型变量的指针);
*s=&m,s指向的内容是m的地址,又因为s指向的内容是t,所以t的值改变成为m的地址,即t 指向的内容为m(一个整型变量),因此*t(t指向的内容)的值为5
5——**s=*(*s)=*t
3——i的值
3——int *p=&i 等价于 int *p;(定义一个整形指针p)p=&i;(p的值为i的地址),所以*p的值为3
3——int **r(定义一个指针r,r指向的内容是一个整形指针),r=&p(r的值为p的地址,即r指向的 内容是一个整形指针p,其中p的值是i的地址)**r=*(*r)=*p
说的不太清楚请见谅,我指针也是属于一知半解,不过因为指针直接访问内存,所以请一定理解好它,否则以后编写C语言的程序很容易造成编译器检查不出的错误导致大范围的人工查错。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询