有以下程序? ? ?#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);? ? ?}程序的輸出結(jié)果是A) ?21.10B) ?11.10C) ?12.10D) ? ?1.10為什么是d。不懂為什么s還指向a
2 回答
已采納

TDYu
TA貢獻(xiàn)3條經(jīng)驗(yàn) 獲得超1個(gè)贊
首先主程序中s指向a的地址,你也確實(shí)把這個(gè)地址丟給fun函數(shù)的s了。
然后你fun函數(shù)里的s重新分配了地址,這時(shí)代表fun函數(shù)里的s指向別的位置沒錯(cuò)。
但是重點(diǎn)是,你主程序中的s并沒有改變指向,它依然指向a沒變過,改變的只是你在fun函數(shù)里的s,這兩邊的s是存活在不同的區(qū)域完全不同的兩個(gè)。
你可以想像成兩個(gè)一樣名字的人住到一起(指向一樣位置),但后來有一個(gè)搬走了(fun函數(shù)里的),可是原本的那個(gè)確實(shí)還在那屋沒走。
- 2 回答
- 0 關(guān)注
- 1712 瀏覽
添加回答
舉報(bào)
0/150
提交
取消