输出结果不同

图片图片
这两段代码看得很乱,它们的差别就在于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的指向啊!图片

为什么我输出的是这个结果?图片