Re: [考題] 中華電信101年計算機概論
用一個容易記住的方式來說明:
透過 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)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):