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

有以下程序

     #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.10

B)  11.10

C)  12.10

D)    1.10

为什么是d。不懂为什么s还指向a

kathria
浏览 1657回答 2
2回答

TDYu

首先主程序中s指向a的地址,你也确实把这个地址丢给fun函数的s了。然后你fun函数里的s重新分配了地址,这时代表fun函数里的s指向别的位置没错。但是重点是,你主程序中的s并没有改变指向,它依然指向a没变过,改变的只是你在fun函数里的s,这两边的s是存活在不同的区域完全不同的两个。你可以想像成两个一样名字的人住到一起(指向一样位置),但后来有一个搬走了(fun函数里的),可是原本的那个确实还在那屋没走。

慕粉13202587281

因为重新申请内存了
打开App,查看更多内容
随时随地看视频慕课网APP