Re: [考題] 中華電信101年計算機概論

看板Soft_Job作者 ( 返無)時間13年前 (2012/04/04 15:17), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
用一個容易記住的方式來說明: 透過 function 改變 non pointer value, 要傳那個變數的位址 ex: int a; f(a) 在 f() 要改變 a, 要傳入 a 的位址, 這應該沒問題。 f(&a) -> f() 要做相應的改變。 f(int *) 透過 function 改變 pointer, 要傳??還是要傳入那個變數的位址 int *a; f(a) -> 這無法改變 a 本身。 在 f() 要改變 a, 要傳入 a 的位址, 所以要傳入 f(&a) 那 f() prototype 要改成 f(int **) 原則就是都要傳入位址, 沒有加上 &, 在 function return 後, 不會改變傳入的 function 參數。 要得到 3 要改成這樣: #include <stdio.h> void f(int **p, int a[]){*p=a;} void main() { int a[]={1,3,5,7}; int *p=&a[1]; f(&p,a); p++; printf("%d",*(p)); } ※ 引述《idforask (something is wrong者水)》之銘言: : ※ [本文轉錄自 Examination 看板 #1FURfXvF ] : 作者: malowda (malowda) 看板: Examination : 標題: [考題] 中華電信101年計算機概論 : 時間: Mon Apr 2 22:40:31 2012 : void f(int *p, int a[]){p=a;} : void main() : { : int a[]={1,3,5,7}; : int *p=&a[1]; : f(p,a); : p++; : printf("%d",*(p)); : } : ANS:5 : 想法是p指向a的第一個位置也就是3 : 副程式中p=a是把a的第0個位置傳給p : 主程式中的p和副程式中的p應該是指向同一個位置 : 都是a[0],然後p++應該是a[1] : 原po的答案是3 : 請各位大大能夠幫幫原po我是那錯了 : 謝謝 : ---------------- : 這題小弟也是3 : 不知有沒高手可以開釋一下 : 還是答案錯了呢 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 58.114.128.116 ※ 編輯: descent 來自: 111.184.189.124 (04/04 16:27)
文章代碼(AID): #1FU_Maiy (Soft_Job)
文章代碼(AID): #1FU_Maiy (Soft_Job)