免費開始練習
地特四等申論題 109年 [資訊處理] 程式設計概要

第 一 題

一、下列 C 程式的執行結果為何?(15分)
#include
#include
#define X 3
#define Y 4
void funA(int *, int, int), funB(int *, int, int);
int main(void){
int arr[X][Y] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
printf("輸出1:\n");
funA(*arr,X,Y);
funB(*arr,X,Y);
printf("輸出2:\n");
funA(*arr,X,Y);
system("pause");
return 0;
}
void funA(int *ptr,int x,int y){
int i,j;
for (i=0;ifor(j=0;jprintf("%3d ", *(ptr+i*y+j));
printf("\n");
}
}
void funB(int *ptr,int x, int y){
int i,j;
int arr[x][y];
for (i=0;ifor(j=0;jarr[x-i-1][y-j-1] = *(ptr+i*y+j);
for (i=0;ifor(j=0;j*(ptr+i*y+j) = arr[i][j];
}
📝 此題為申論題

思路引導 VIP

面對此類指標與陣列混合題型,應首先了解二維陣列在記憶體中為連續的一維配置。接著分析函式參數傳遞時 *arr 退化為一維指標的意義,並仔細追蹤 funB 中索引映射 [x-i-1][y-j-1] 所產生的陣列反轉(旋轉180度)效果。

🤖
AI 詳解 AI 專屬家教

【解題關鍵】掌握二維陣列在記憶體中的連續配置特性,以及一維指標偏移量 *(ptr+i*y+j) 與二維陣列索引的轉換對應關係。 【詳解】 一、初始狀態與 funA 函式分析:

▼ 還有更多解析內容

🏷️ 相關主題

C/C++ 程式設計:語法、指標與記憶體管理
查看更多「[資訊處理] 程式設計概要」的主題分類考古題