今天早上遇到乙個問題,我想向函式裡面傳送乙個二維陣列int
matr
ix[m
ax][
max]
int \ matrix[max][max]
intmat
rix[
max]
[max
],我採用的方法是二級指標,我當時的考慮是二維陣列名的二級解引用是乙個整數,整型二級指標的的二級解引用也是乙個整數,所以我想當然地就認為它們是一樣的了,程式只是給了警告,我當時也沒太在乎,結果程式出錯了,下面是警告報告,它告訴我,我傳送的是乙個int
(∗)[
7]
int \ (*)[7]
int(∗)
[7]型別的資料,但是函式宣告是乙個二級指標。後來我仔細思考了一下,兩者的不同就在於,二級指標是整數的指標的指標,而陣列指標的乙個指向陣列的指標,所以二者不可以亂用,我們不能向voi
dfun
c(in
t∗∗m
at
)void\ func(int \ **mat)
voidfu
nc(i
nt∗∗
mat)
中傳入乙個陣列指標,如果我們想把二維陣列名當做引數傳遞給乙個函式,那麼這個函式應該這樣寫voi
dfun
c(in
t(∗m
at)[
n]
)void \ func(int \ (*mat)[n])
voidfu
nc(i
nt(∗
mat)
[n])
或者這樣寫voi
dfun
c(in
tmat
[][n
])
void \ func(int \ mat[n])
voidfu
nc(i
ntma
t[n]
)。下次進行帶有陣列傳送的函式設計的時候一定要想清楚,到底是什麼型別的資料將會被傳進陣列。還有就是,對乙個陣列的操作必須要知道這個陣列的維數,所以我們必須宣告這些陣列各維的長度。
||
=== build: debug in dijkstra (compiler: gnu gcc compiler)===
|c:\users\jiage\desktop\codeblocks\dijkstra\main.c|
14|note: expected 'int **' but argument is of type 'int (*)[7]'|||
=== build finished:
0error
(s),
1warning
(s)(
0minute
(s),
0second
(s))===
|
C 陣列指標 指標陣列與二級指標
二級指標 測試 陣列指標是指標,意為指向陣列的指標 指標陣列是陣列,意為陣列內部儲存著指標的陣列。陣列指標具有如下特性1 陣列指標用於指向乙個陣列 陣列名是陣列首元素的起始位址,但不是陣列的起始位址,通過取位址符 作用域陣列名可以得到陣列的起始位址 可以通過陣列型別定義陣列指標如 arraytype...
二級指標與陣列
char str 這是字元指標陣列,每乙個陣列元素是乙個指標變數,而每個指標變數指向字串首字元位址,即是字串的位址。因為每乙個字串都代表的是乙個位址,是字串首字元的位址。字串常量是放在文字常量區,是不可以更改的。而指標陣列str裡面存放的是指向字串位址,它是可變的。如str 0 是可變的,它是指標變...
二級指標與指標陣列的關係
1 指標陣列argv中每個元素都是指標,即每個元素都是字串的首位址.因此測試1組輸出結果為 argv 0 0x4270ac,argv 0 abcdefg argv 0 0x426034,argv 0 1234567 argv 0 0x42601c,argv 0 q1w2e3r 2 二級指標p指向指標...