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 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制