普考申論題
110年
[資訊處理] 程式設計概要
第 三 題
📖 題組:
四、程式語言 C 可使用不同資料型別的變數存取資料與傳遞函式的參數。 #include
#include
#include
void myFunction(int *a, int b, int *c, char *d){
c[1] = *a + b;
d[*c] = d[2];
b = 17;
int *r = c + 1;
c = a;
*c = *a + 1;
printf("during:%s %d %d %d %d\n", &d[1], *a, b, *c, *r);
}
int main(){
char animal[7] = "cat";
int x = strlen(animal);
int z[3] = {1, 3, 5};
int * y =(int *)malloc(sizeof(int)*3);
int *p = &x;
int *q = &z[1];
q[1] = *p + 10;
printf("before:%s %d %d %d %d\n", animal, *z, z[1], z[2], x);
myFunction(p, x, q, animal);
printf("after:%s %d %d %d %d\n", animal, z[0], z[1], z[2], x);
return 0;
}
四、程式語言 C 可使用不同資料型別的變數存取資料與傳遞函式的參數。 #include
📝 此題為申論題,共 3 小題
小題 (三)
請說明比較 C 程式語言中,函式參數傳遞方法,傳值呼叫(call by value)與傳址呼叫(call by address)異同。(5 分)
思路引導 VIP
這是一題非常傳統的比較題。需明確定義「傳值」與「傳址」的行為模式,比較兩者對原變數的影響,以及在執行效能與記憶體開銷上的優劣(例如傳遞大型結構時的差異)。
小題 (一)
請說明上述程式執行的結果。(15 分)
思路引導 VIP
本題測驗 C 語言的指標運算、陣列操作及字串處理。必須畫出記憶體配置圖,逐行追蹤主程式中的變數,以及進入函式後指標操作所引發的副作用(Side Effect)。特別注意 char animal[7] = "cat" 實際上記憶體中存放的是 'c', 'a', 't', '\0', '\0', '\0', '\0'。要注意傳址呼叫對原本陣列與變數的改動。
小題 (二)
請說明比較 C 程式宣告一個陣列時,如上述程式變數 y、z,使用一般陣列變數與指標變數的異同。(5 分)
思路引導 VIP
本題要求比較靜態宣告的陣列(int z[3])與動態配置記憶體的指標陣列(int *y = malloc(...))。應從記憶體配置區域(Stack vs Heap)、變數本身的可變性(常數指標 vs 變數指標),以及生命週期與釋放方式三個角度進行論述。