这两段代码看得很乱,它们的差别就在于s=&t;这条语句,有没有这条语句, 它们的输出是不同的,能解释下吗?
一幅图说明问题
第一个改变了s的值,其已经指向了其他地方,,第二个则未改变
两个程序都不会修改s,这个你只要加点输出就知道了
#include <stdio.h>
int k = 7;
void f(int ** s)
{
int * t = &k;
s = &t;
*s = &k;
printf("%d,%d,%d,", k, *t, **s);
}
int main()
{
int i = 3, *p = &i, **r = &p;
printf("r before %d\n", r);
printf("%d,%d,%d\n", i, *p, **r);
f(r);
printf("r after %d\n", r);
printf("%d,%d,%d\n", i, *p, **r);
}
*p = &i, **r = &p; //改变**r会改变i,改变*r会改变p
s = &t; //这里把s指向另一个指针,再修改s的内容就不会影响到实际参数r了。
不明白在main中r怎么前后都没变,在f中明明有s=&t;的,改变了r的指向啊!
为什么我输出的是这个结果?