2017-04-06 128 views
1

我在搜索C中的指針,我發現this question。基本上,用戶想知道如何在C中傳遞一個矩陣作爲函數的參數。最投票答案表示他不能使用指針(類型**標識符)的指針,因爲:爲什麼不能傳遞一個二維數組作爲函數參數?

(...)任何靜態二維數組要求指針的第二個層次是const指針靜態數組

時,他說「常量指針靜態數組」什麼他意味着什麼?這是如何編碼的?我知道const變量(包含指針)的含義是什麼,所以也是靜態變量。但是,在這種情況下,爲什麼它必須是const指針指向靜態數組

+0

您引用的文字沒有意義。看起來像寫了它的人也刪除了他的帳戶 –

+2

基本上聲明'int array [x] [y];'(其中'x'和'y'是常量),你聲明一個類型爲int [x] [ Y]'。當作爲參數傳遞給函數時,第一級間接轉換爲指針。這意味着它將作爲'int(*)[y]'傳遞,它與** int **不同。 'int **'是一個**指針指向int的指針,'int(*)[y]'是一個**指向int數組的指針**'[y]' (整數大)。 –

+0

在這種情況下,「靜態」可能意味着「與動態相反」。指針指針語法不是二維數組,大多數情況下也是不好的做法。請參閱[正確分配多維數組](http://stackoverflow.com/questions/42094465/correctly-allocating-multi- dimensional-arrays)。 – Lundin

回答

1

當他說「const指向靜態數組」時他的意思是什麼?

我認爲他的意思是說數組需要被視爲連續的;它必須是一個接一個的元素序列,沒有空間指針。他可能會試圖聲稱,解除引用一個二維陣列(例如*matmat[0])應導致常數指向子陣列(在某些情況下,這也是不正確的,其中一個I'當作爲sizeof的操作數使用時,將很快覆蓋)。

FWIW,這也是不正確:

先前報頭將是正確的,如果基體是動態數組。

int mat[SIZE][SIZE];如果我們檢查此對象,sizeof mat等於sizeof (int) * SIZE * SIZE;在這個矩陣內沒有任何指針存儲空間。然而,在void ins (int **matrix, int row, int column);int **matrix告訴我們,matrixint *,這意味着有空間指針,也意味着matrix可能不是連續的。

...這是如何編碼的?

錯誤,因爲這問題,因爲int **int *對象,而不是在int[SIZE]對象。

...爲什麼它必須是const指針指向靜態數組

請看這個答案的第一段。

相關問題