有以下程序? ? ?#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函數里的),可是原本的那個確實還在那屋沒走。
- 2 回答
- 0 關注
- 1721 瀏覽
添加回答
舉報
0/150
提交
取消