示範以「陣列指標」 (`float (*p)[4]`) 作為函數參數與回傳值,存取二維陣列特定行的資料。
float (*p)[4]; /* 指向含 4 個 float 的陣列 (即二維陣列的一行) */
float *p[4]; /* 指標陣列:4 個 float* — 完全不同! */
#include
float *search(float (*p)[4], int n) { /* 參數:陣列指標 */
return *(p + n); /* 回傳第 n 行首元素位址 */
}
int main() {
float score[][4] = {{99,98,97,99}, {88,97,96,96}, {96,95,93,90}};
int sno;
printf("請輸入學號 (0、1、2):");
scanf("%d", &sno);
float *row = search(score, sno); /* score 退化為 float(*)[4] */
for (int i = 0; i < 4; i++)
printf("%.1f ", *(row + i)); /* 遍歷該行 */
printf("\n");
return 0;
}
score (float[3][4])
├─ row 0: 99 98 97 99
├─ row 1: 88 97 96 96
└─ row 2: 96 95 93 90
p = score → 指向 row 0
p + 1 → 指向 row 1 (位址 + 4*sizeof(float))
*(p + n) → 第 n 行陣列,退化為 float* (首元素位址)
掌握 `float (*p)[N]` 陣列指標宣告,即可在函數間傳遞二維陣列並保持行長度資訊,避免「指標退化失去列長」問題。