我在搜索C中的指針,我發現this question。基本上,用戶想知道如何在C中傳遞一個矩陣作爲函數的參數。最投票答案表示他不能使用指針(類型**標識符)的指針,因爲:爲什麼不能傳遞一個二維數組作爲函數參數?
(...)任何靜態二維數組要求指針的第二個層次是const指針靜態數組
時,他說「常量指針靜態數組」什麼他意味着什麼?這是如何編碼的?我知道const變量(包含指針)的含義是什麼,所以也是靜態變量。但是,在這種情況下,爲什麼它必須是const指針指向靜態數組?
我在搜索C中的指針,我發現this question。基本上,用戶想知道如何在C中傳遞一個矩陣作爲函數的參數。最投票答案表示他不能使用指針(類型**標識符)的指針,因爲:爲什麼不能傳遞一個二維數組作爲函數參數?
(...)任何靜態二維數組要求指針的第二個層次是const指針靜態數組
時,他說「常量指針靜態數組」什麼他意味着什麼?這是如何編碼的?我知道const變量(包含指針)的含義是什麼,所以也是靜態變量。但是,在這種情況下,爲什麼它必須是const指針指向靜態數組?
當他說「const指向靜態數組」時他的意思是什麼?
我認爲他的意思是說數組需要被視爲連續的;它必須是一個接一個的元素序列,沒有空間指針。他可能會試圖聲稱,解除引用一個二維陣列(例如*mat
或mat[0]
)應導致常數指向子陣列(在某些情況下,這也是不正確的,其中一個I'當作爲sizeof
的操作數使用時,將很快覆蓋)。
FWIW,這也是不正確:
先前報頭將是正確的,如果基體是動態數組。
int mat[SIZE][SIZE];
如果我們檢查此對象,sizeof mat
等於sizeof (int) * SIZE * SIZE
;在這個矩陣內沒有任何指針存儲空間。然而,在void ins (int **matrix, int row, int column);
,int **matrix
告訴我們,matrix
點int *
,這意味着有是空間指針,也意味着matrix
可能不是連續的。
...這是如何編碼的?
錯誤,因爲這問題,因爲int **
點int *
對象,而不是在int[SIZE]
對象。
...爲什麼它必須是const指針指向靜態數組?
請看這個答案的第一段。
您引用的文字沒有意義。看起來像寫了它的人也刪除了他的帳戶 –
基本上聲明'int array [x] [y];'(其中'x'和'y'是常量),你聲明一個類型爲int [x] [ Y]'。當作爲參數傳遞給函數時,第一級間接轉換爲指針。這意味着它將作爲'int(*)[y]'傳遞,它與** int **不同。 'int **'是一個**指針指向int的指針,'int(*)[y]'是一個**指向int數組的指針**'[y]' (整數大)。 –
在這種情況下,「靜態」可能意味着「與動態相反」。指針指針語法不是二維數組,大多數情況下也是不好的做法。請參閱[正確分配多維數組](http://stackoverflow.com/questions/42094465/correctly-allocating-multi- dimensional-arrays)。 – Lundin