为了账号安全,请及时绑定邮箱和手机立即绑定

c语言指针。来来来帮我看看

c语言指针。来来来帮我看看

C C# C++
kathria 2017-03-17 10:47:13
有以下程序     #include <stdio.h>     #include <stdlib.h>     void  fun( double  *p1,double  *p2,double  *s)     {  s = (double *)calloc( 1,sizeof(double) );        *s = *p1 + *( p2+1 );     }     main()     {  double  a[2] = { 1.1, 2.2 }, b[2] = { 10.0, 20.0 }, *s=a;        fun( a, b, s );        printf( "%5.2f\n", *s);     }程序的输出结果是A)  21.10B)  11.10C)  12.10D)    1.10为什么是d。不懂为什么s还指向a
查看完整描述

2 回答

已采纳
?
TDYu

TA贡献3条经验 获得超1个赞

首先主程序中s指向a的地址,你也确实把这个地址丢给fun函数的s了。

然后你fun函数里的s重新分配了地址,这时代表fun函数里的s指向别的位置没错。

但是重点是,你主程序中的s并没有改变指向,它依然指向a没变过,改变的只是你在fun函数里的s,这两边的s是存活在不同的区域完全不同的两个。

你可以想像成两个一样名字的人住到一起(指向一样位置),但后来有一个搬走了(fun函数里的),可是原本的那个确实还在那屋没走。

查看完整回答
反对 回复 2017-03-17
  • kathria
    kathria
    可以叫一样的名字吗?平常做题的时候指针的改变不就会影响main函数里面指针指的值吗
  • TDYu
    TDYu
    身在不同区域可以同名啊。但是你现在的状况是,main里面的指针指向从没改变过。要是还不懂今晚再图解给你看,现在没法画。
?
慕粉13202587281

TA贡献9条经验 获得超1个赞

因为重新申请内存了

查看完整回答
反对 回复 2017-04-03
  • 2 回答
  • 0 关注
  • 1656 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信