coco1312 2015-08-20 02:57 采纳率: 0%
浏览 1842
已采纳

求解C程序问题,f(r)后第二个printf结果为何是3,3,3呢?

#include
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\n",i,*p,**r);}
/*VC++程序运行结果:7,5,5,3,3,3*/
求解C程序问题,f(r)后第二个printf结果为何是3,3,3呢?r的地址调用函数f后不是改变了吗?应该为5吧?p的地址也应该改变了吧?

  • 写回答

4条回答 默认 最新

  • Cjungle 2015-08-20 12:03
    关注

    这个问题的关键在于函数f(int** s)并没有修改s的地址,只是修改了s的值。你可以先把s看成一个普通变量,向函数中传入一个普通变量会对这个普通变量的值产生影响吗?事实上,除非你传了这个变量的指针进去,否则不会对这个变量的值造成这个影响。
    如果还是不明白,可以看下下面这段代码:
    #include
    void f(int* p)
    {
    int i = 9;
    p = &i;
    }
    int main()
    {
    int i = 10;
    int *p = &i;
    f(p);
    printf("%d\n",*p)
    getchar();
    return 0;
    }
    打印出来的结果是10,因为p虽然作为指针传进去了,但是在函数中只是对p的值进行了修改,p的地址并没有变(p本身的地址没变,而不是p指向的地址没变)。基本上你只要能弄清指针指向的地址和指针本身的地址的区别这个问题就不难理解了(希望我没有把你绕晕)

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 解决websocket跟c#客户端通信
  • ¥30 Python调用dll文件输出Nan重置dll状态
  • ¥15 浮动div的高度控制问题。
  • ¥66 换电脑后应用程序报错
  • ¥50 array数据同步问题
  • ¥15 pic16F877a单片机的外部触发中断程序仿真失效
  • ¥15 Matlab插值拟合差分微分规划图论
  • ¥15 keil5 target not created
  • ¥15 C/C++数据与算法请教
  • ¥15 怎么找志同道合的伙伴