一道關於C語言指標的問題?

時間 2021-06-08 00:47:22

1樓:亂碼君

&array的意思是 &array[0]

這是個C語言語法糖,所以不用管它怎麼理解,array和&array是同乙個意思,記住它代表乙個值,就是陣列的起始位址即可。

(int(*)[3] )是強制轉換,就好比(int)是把值強制轉換為整數,(int(*)[3] )是把值強制轉換為乙個陣列指標,這個指標指向長度為3的陣列,陣列內值的型別是int。

為什麼說這個東西強制轉換的型別是個陣列指標型別?強制轉換的時候我們可以在乙個合適的地方加上乙個變數識別符號成為乙個宣告,這個變數的型別就是強制轉換的型別。比如(int),在合適的地方加上識別符號x成為int x,x的型別是整數,所以(int)就是指強制轉換強制轉換為整數。

而(int(*)[3] ),明顯*後面可以加上引數組成乙個宣告,也就是 int (*x)[3],這裡的x是陣列指標。

如果還不清楚為什麼是陣列指標——首先,把(*x)[3]作為乙個表示式整體,前面的int說明這(*x)[3]整體的值是乙個整數。括號裡的表示式(*x)密不可分,所以(*x)是乙個陣列,陣列長度為3,整個陣列的值是整數。最後,*x是乙個陣列,x當然是陣列指標。

所以整個強制轉換就是轉成陣列指標。

那為啥又說是轉換成二維陣列?從c語言語法角度看指標和陣列是不一樣的,這裡的p本身也是乙個被儲存的指標變數,而不是乙個二維陣列整體。在這裡轉換出來的p,從語法上講它只負責這9項陣列的前3項。

但從功能上講此處的p和第二維是3的二維陣列可以是等同的。對指標p進行增減時,每當p+1,位址移動3,這與此處二維陣列的第一維的增減功能相同。而*(p+1)又可以通過語法糖寫成p[1] ,因此假定array是乙個在此宣告的3*3二維陣列,那麼(*p+1)[2],也就是p[1][2],和array[1][2]有完全相同的功能。

所以陣列指標幾乎可以和二維陣列等同看待。

請教乙個C語言指標陣列問題?

郭建波 陣列指標 也稱行指標 定義 int p 10 優先順序高,首先說明p是乙個指標,指向乙個整型的一維陣列,這個一維陣列的長度是10,也可以說是p的步長。也就是說執行p 1時,p要跨過10個整型資料的長度。例 int p 4 該語句是定義乙個陣列指標,指向含4個元素的一維陣列。所以陣列指標也稱指...

這個c語言問題用指標該怎麼寫?

看到這個感覺是時候安利一波C 了,這貨名字裡面也帶著個C,讀作C Sharp。首先定義好字串 strings1 There is a tree behind the house strings2 A big tree is cut down there 接下來三步走戰略開始 第一步,單詞拆分並去重 ...

c語言指標的問題,int i 1 int p p i,此時 p 1。為什麼不能直接賦值 p i呢。

AGMCAI 答案很簡單,不要去在乎 指標 這個身份本質上p和i一樣,都是變數。所以不妨試一下int i printf d i 你會發現結果很奇怪。只是因為當你宣告乙個變數i,會從記憶體中找乙個空間,給它命了乙個名,叫做i。至於這個空間裡面有什麼?誰都不知道。因此,使用變數前要對變數進行初始化。身為...