100年普考程式設計概要 - 普考

Table of Contents

[考題] 國考歷屆考題與考題觀念討論(書裡看到的選這個)請附上想法、出處
請問下列 C 程式片段執行後,a 陣列的內容為何?
#define N 10
int a[N]={1,2,3,4,5,6,7,8,9,10};
int *p=&a[0], *q=&a[N-1], temp;
while(p < q)
{ temp=*p;
*p++=*q;
*q--=temp;
}

答案是{10,9,8,7,6,5,4,3,2,1}

我的想法是
p是儲存a[0]的位址
q是儲存a[9]的位址
而a[0]的位址永遠比a[9]小
那while為何不會成為無窮迴圈?

再來就是*p和*q的值分別指的是a[0]和a[9]的內容
為何做加減也會影響到陣列內其他元素的值?

求解惑

--

All Comments

Yedda avatarYedda2017-03-17
*p=&a[0] 代表他存的是a[0]的位址,不是內容
Lucy avatarLucy2017-03-21
宣告時*p=&a[0]代表 指標變數p指向a[0]的位址
Kama avatarKama2017-03-26
而運算時*p則代表指標變數的內容 也就是a[0]的內容
Doris avatarDoris2017-03-30
不知是否有哪個環節理解錯誤?
Mary avatarMary2017-04-03
推文說的都沒錯,已回應在版上
Candice avatarCandice2017-04-05
你有看到p++跟q--嗎?