我有一個關於指向2d數組的指針的問題。如果陣列是類似的指向2d數組的指針
int a[2][3];
然後,這是一個指針數組a
?
int (*p)[3] = a;
如果這是正確的,我想知道是什麼[3]
從int(*p)[3]
是什麼意思?
我有一個關於指向2d數組的指針的問題。如果陣列是類似的指向2d數組的指針
int a[2][3];
然後,這是一個指針數組a
?
int (*p)[3] = a;
如果這是正確的,我想知道是什麼[3]
從int(*p)[3]
是什麼意思?
而不是將int[2][3]
稱爲'2d數組',您應該認爲它是'數組數組'。它是一個包含兩個項目的數組,每個項目本身就是一個數組,其中包含3個整數。
int (*p)[3] = a;
您可以使用p
以指向這兩個項目的a
。 p
指向一個三int數組 - 即第一個這樣的項目。 p+1
會指向第二個3-int數組。要初始化p
指向第二元件,使用:
int (*p)[3] = &(a[1]);
以下是等價的方法,以指向第一兩個項目。
int (*p)[3] = a; // as before
int (*p)[3] = &(a[0]);
[3]
是該類型的一部分。在這種情況下,p
是指向保存整數的大小爲3的數組的指針。
數組的特定類型始終包含其大小,因此您具有類型int *[3]
或int *[5]
,但不僅僅是大小未定義的int *[]
。
int *x[20]; /* type of x is int *[20], not just int *[] */
int y[10][10]; /* type of y is int[10][10], not just int[][] */
感謝您的評論。當你說大小,它是否意味着(* p)有[0],[1]],[2]?如果是這樣的話,[2]的空間在哪裏?還是它指向[0] [0]和[0] [1]? – user1047092 2011-12-23 15:11:41
'p'只是一個指向3個數組的指針。它不知道'a'的第一維是2,因爲它被分配給'a'的第一個元素,它的類型'int [3]'。 – 2011-12-23 15:17:55
Stricly來講,沒有,int (*p)[3] = a;
不是指針a
。它是指向a
的第一個元素的指針。 a
的第一個元素是三個整數的數組。 p
是一個指向三個整數的指針。
的指針陣列a
將由此宣稱:
int (*q)[2][3] = &a;
的p
和q
的數值有可能(或可能甚至需要來定)是相同的,但它們是不同的類型。當您在p
或q
上執行算術運算時,這將起作用。 p+1
指向數組a
的第二個元素,而q+1
指向剛剛超出數組a
末尾的內存。
切記:cdecl是你的朋友:int a[2][3]
,int (*q)[2][3]
。
int a[2][3];
a
被讀爲int數組3的數組2,它只是一個數組數組。當你寫,
int (*p)[3] = a;
它聲明p
作爲指針到它是一個陣列第一個元素。因此,p
指向3個數組,它是數組數組的一個元素。
考慮這個例子:
int a[2][3]
+----+----+----+----+----+----+
| | | | | | |
+----+----+----+----+----+----+
\_____________/
|
|
|
p int (*p)[3]
這裏,p
是指針指向的3個整數,其是數組的數組的元素的數組。
謝謝你的幫助。這張圖有很大幫助! – user1047092 2011-12-23 15:20:19
ASCII藝術的+1。我想是正確的。 – 2011-12-23 15:21:19
不會「p」變成3個整數指針的數組,第一個值指向第一個值「a」? – Matthew 2011-12-23 17:19:33
另外注意: -
INT * P [5] // p是5個指針
INT(* P)[5] // p個點的陣列,以陣列5 ints
int(*(p + 5))[10] // p是一個指向結構第5個元素有10個整數的結構的指針。
這是如何添加到已經有用的答案列表? – rayryeng 2015-10-25 20:25:36
OP提出了一個概念性問題,我已經在這裏回答了。代替5放3 !.此外,我添加了更多關於如何使用指針從二維數組中獲取值的細節。 – BigDataScholar 2015-10-25 20:32:00
我認爲這比其他答案更令人困惑。 – rayryeng 2015-10-25 20:38:39
你甚至可以編寫'[3] a' :)這是學習C中真正的數組的好方法。 – vsz 2011-12-23 16:00:59
@vsz,我無法決定這是真的很酷,還是真的很瘋狂:-) – 2011-12-23 19:23:48
@vsz:你的意思是'3 [a]'。 – 2011-12-23 22:55:53