民國102年 第2梯次 電腦軟體設計(C++)乙級 學科

第76題

函數f 1 之第一個參數的資料結構為陣列i n t p a g e s [ 10 ] [ 30 ] ;,下列有關二維陣列在函數f 1 之 宣告方式,何者是正確?

題目

函數f 1 之第一個參數的資料結構為陣列i n t p a g e s [ 10 ] [ 30 ] ;,下列有關二維陣列在函數f 1 之 宣告方式,何者是正確?

  1. (1) v o i d f 1 ( i n t p a g e s [ ] [ ] , i n t s i z e ) ;
  2. (2) v o i d f 1 ( i n t p a g e s [ ] [ 30 ] , i n t s i z e ) ;
  3. (3) v o i d f 1 ( i n t p a g e s [ 10 ] [ ] , i n t s i z e ) ;
  4. (4) v o i d f 1 ( i n t & p a g e s , i n t s i z e ) ;

官方答案

(2) v o i d f 1 ( i n t p a g e s [ ] [ 30 ] , i n t s i z e ) ;

解析

在 C/C++ 中,將二維陣列當作函式引數傳遞時,除了第一維(列數)可以省略外,其餘維度的大小必須明確指定,因為編譯器需要第二維的大小來計算每一列的位移(row stride = 30 × sizeof(int) = 120 位元組)。因此正確宣告為 void f1(int pages[][30], int size);,即選項2。選項1 pages[][] 與選項3 pages[10][] 都省略了第二維,編譯會失敗;選項4 int& pages 是單一個 int 的參考,並非二維陣列,型態不符。第一維寫 10 或留空都可以,但 [30] 不可省略。

AI 參考解析(推得答案已與官方答案比對一致),非官方公告內容,僅供備考參考。

官方資料