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