回答
爲了詳細說明正確答案有點這裏已經:
第一行:
int (*p)[10];
聲明「p」是一個指針陣列的具有10的容量的存儲器地址整數。它可以用英文讀作:「整數指針'p'指向內存中的10個連續整數」。
第二行:
int *p[10]
宣告 「P []」 是10個指向整數數組。這是一組指向整數的內存地址。在這種情況下,「p」是內存中的10個指針的序列(正好是其他內存的內存地址)。
首先是一個指針陣列,第二個是一個指針數組。
在第一個示例中,p是指針的10個整數數組。在第二個例子中,p是一個由10個指針組成的數組。
可以動態地分配類型的對象「指針10點INT的陣列」,如下所示。
int (**ptr)[10] = new (int (*)[10]);
注意,沒有分配任何整數的空間;只有指針本身。
如下您可以分配10個整數數組:
int *ptr = new int[10];
你不能做什麼(沒有明確鑄造)是一個指向10爲int的動態分配的數組分配給指針類型爲int (*)[10]
。無論何時通過新分配一個數組,即使使用typedef
,新表達式的類型都是指向數組的第一個元素的指針;數組的大小不保留在新表達式的類型中。
這是因爲new[]
表達式可以分配在運行時選擇數組大小的數組,因此將數組大小編碼爲新表達式的類型並不總是可能的(或者甚至是理想的)。
正如已經提出,可以動態地分配10 INT的一個陣列的陣列。第一個數組的大小從類型信息中丟失,並且您得到的是指向四個int數組的第一個元素(大小爲1)的指針。
int (*p)[10] = new int[1][10];
即使是隻有1(10整型數組)的數組,你仍然需要使用delete[]
取消分配p
。
delete[] p;
當然,一個人永遠不能實際上是需要調用手動刪除的位置。
int (*p)[10];
+------+ +-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+
| p | =========================>|(*p)[0]|(*p)[1]|(*p)[2]|(*p)[3]|(*p)[4]|(*p)[5]|(*p)[6]|(*p)[7]|(*p)[8]|(*p)[9]|
+------+ +-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+
sizeof p
將返回sizeof (void *)
(4上32位系統中,8上的64位系統)
sizeof *p
將返回(在大多數系統40)10*sizeof (int)
int *p[10]; is the same as int* (p[10]);
p
+------+------+------+------+------+------+------+------+------+------+
| p[0] | p[1] | p[2] | p[3] | p[4] | p[5] | p[6] | p[7] | p[8] | p[9] |
+------+------+------+------+------+------+------+------+------+------+
sizeof p
將返回10*sizeof (void *)
( 40位32位系統,80位64位系統)
sizeof *p
將返回sizeof (int *)
(4上32位系統中,8在64位系統)
只是想評論和讚揚你對這個答案的深度和細節。去ASCII圖紙! – AlexFZ
正如其他人指出的那樣,int (*p)[10]
聲明p
作爲指針的int
10元件陣列,而int *p[10]
聲明p
作爲10-指向int
的指針元素數組。
在C中,聲明是圍繞表達式的類型構建的,而不是對象。這個想法是,聲明的形式應該與代碼中使用的表達式的形式相匹配。
假設p
是指向int
(第二種情況)的指針數組。要訪問一個特定的整數值,你下標到數組和間接引用的結果,如
x = *p[i];
Postfix的運營商如[]
和()
比一元運算符像*
更高的優先級,所以上面的語句解析爲(IOW,*
適用於表達式p[i]
)。
的類型表達*p[i]
是int
的,所以p
相應聲明int *p[10];
。
現在我們假設p
是一個指向int數組的指針(第一種情況)。要訪問一個特定的整數值,你最好取消引用指針,然後標中的結果,如
x = (*p)[i];
同樣,因爲[]
的優先級高於*
,我們需要使用括號明確的*
只關聯p
,而不是p[i]
。表達式(*p)[i]
的類型爲int
,因此p
的聲明爲int (*p)[10];
。
- 1. C指針指針數組
- 2. C++ - 指向數組的指針 - 指針
- 3. C/C++指針數組VS指針的指針
- 4. C++指針數組
- 5. C指針數組
- 6. C++數組指針
- 7. 指針數組C++
- 8. C指針結構數組指針
- 9. 字符指針指針數組用C
- 10. C++中數組指針指針
- 11. C++中的數組指針
- 12. C中的指針數組?
- 13. 指針C++的數組?
- 14. C++/OpenGL - 數組的指針
- 15. C++中的數組指針
- 16. 指針數組和指針指向一個數組在C++
- 17. 從C++指針到數組指針的數組Cython
- 18. C中的數組指針和指針數組
- 19. C中數組指針的數組#
- 20. 指向c中的數組的指針
- 21. C++ - 指向向量的指針數組?
- 22. 指向數組C++的指針
- 23. 指向C中數組的指針
- 24. C++指向不同數組的指針
- 25. C++指向int數組的指針
- 26. C指向數組的指針
- 27. C++指向數組的指針
- 28. 指向C++ 2D數組的指針
- 29. 數組和指針C++
- 30. 指針移位數組C++
在C++ - faq文章中詳細討論過(其中很多也適用於C):http://stackoverflow.com/questions/4810664/how-do-i-use-arrays-in-c – Cubbi
http:// cdecl。org – sidyll