二級指標與陣列指標的區別

2021-09-23 07:37:29 字數 1428 閱讀 3564

今天早上遇到乙個問題,我想向函式裡面傳送乙個二維陣列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指向指標...