在上面的代碼中,函數sum將行數3作為參數,因為data是一個數組名,該數組有3個元素,每個元素都是一個由4個int值組成的數組。因此data的類型是指向 由4個int值組成的數組 的指針。則sum函數的原型如下:
int sum(int (*ar2)[4], int size);其中的括號是必不可少的,因為函數參數不能是數組,而且下面的聲明將聲明一個由 【4個指向int的指針】 組成的數組:
int *ar2[4];還有一種格式與上述原型的含義完全相同,但可讀性更強:
int sum(int ar2[][4], int size);上述兩個原型都指出,ar2是指針而不是數組。指針類型指出,它指向由4個int組成的數組,因此,指針類型制定了列數,因此沒有將列數作為獨立的函數參數進行傳遞。 由于指針類型制定了列數,因此sum()函數只能接受有4列組成的數組,但長度變量指定了行數,因此sum()對數組的行數沒有限制。
int a[100][4];int b[6][4];int total1 = sum(a,100); //a中所有元素的和int total2 = sum(b,6); //b中所有元素的和int total3 = sum(a,10); //a中前10個元素的和int total4 = sum(a+10,20); //a中接下來20個元素的和由于參數ar2是指向數組的指針,嗎如何在函數定義中使用它呢?最簡單的方法是將ar2看作是一個二維數組的名稱,如下:
int sum(int ar2[][4], int size){ int total = 0; for (int r = 0; r < size; r++) for (int c = 0; c < 4; c++) total += ar2[r][c]; return total;}同樣,行數被傳遞給size,但無論是參數ar2的聲明或是內部for循環中,列數都是固定的4列。 可以使用數組表示法是因為:由于ar2指向數組(它的元素是由4個int組成的數組)的第一個元素,因此表達式ar2+r指向編號為r的元素,ar2[r]是編號為r的元素,該元素本身就是一個由4個int組成的數組的名稱,將下表用于數組名得到一個數組元素,因此ar[r][c]是由4個int組成的數組中的一個元素,是一個int值。必須對指針ar2執行兩次解除引用,才能得到數據。最簡單的方法是使用方括號兩次:ar2[r][c]。當然,也可以使用運算符*兩次:
ar2[r][c] == *(*(ar2+r)+c)新聞熱點
疑難解答
圖片精選