回答
「p」是指向4個整數數組的指針嗎?
正確!
我該如何爲這個指針調用「new」?
例如,p = new int[7][4]
。
Err ..是+1直到編輯。new int [7] [4]給你一個單塊28 ints寬 – 2010-08-01 17:18:00
humm ..所以我認爲p是指向4個整數的指針,每個指針指向4個整數的數組,它是正確的?? – 2010-08-01 17:20:54
@Billy:我的例子沒有什麼錯,new int [*] [*] * * int *(int)* [4]'也許它更明顯的typedef?typedef int row [4]; row * p = new row [7];'This is exactly相當於我的代碼,只是更具可讀性,你會認爲這是錯誤的嗎? – fredoverflow 2010-08-01 17:22:23
的online CDECL evaluator是這樣的問題一個有用的資源:
cdecl
C gibberish ↔ English
int (*p)[4];
declare p as pointer to array 4 of int
+1這很酷! – fredoverflow 2010-08-01 18:00:11
...除了'int(* p)[4];'不_declare_'p',而是__defines__它。 (至少在C++中,這個問題是關於的,正如Johannes曾經指出的那樣,在一些領域中,C和C++在什麼是定義和什麼是聲明方面有所不同)。 – sbi 2010-08-01 18:27:20
@sbi:好的,但是每個定義也是一個聲明;)「C聲明符語法」是一個公認的術語。 – fredoverflow 2010-08-01 18:29:08
int (*p)[4]
,着實是一個指向四個int
秒的陣列。
您可以動態分配類型爲「指向四個int
的數組的指針」的對象,如下所示。
int (**ptr)[4] = new (int (*)[4]);
請注意,任何int
s都沒有分配空間;只有指針本身。
您可以分配的4個整數數組如下:
int *ptr = new int[4];
你不能做什麼(沒有明確鑄造)是一個指向4 int
動態分配的數組分配給類型的指針int (*)[4]
。無論何時通過new
分配數組,即使使用typedef,新表達式的類型也是指向數組的第一個元素的指針;數組的大小不會保留在new
表達式的類型中。
這是因爲new[]
表達式可以分配在運行時選擇數組大小的數組,因此將數組大小編碼爲新表達式的類型並不總是可能的(或者甚至是理想的)。
如前所述,您可以動態分配一個數組,其中包含一個4 int
的數組。第一個數組的大小從類型信息中丟失,並且您得到的是指向四個int
的數組的第一個元素(大小爲1)的指針。
int (*p)[4] = new int[1][4];
儘管它只是1(4 INT的陣列)的陣列,則仍然需要使用delete[]
解除分配p
。
delete[] p;
當然,我們不應該真的需要手動調用delete。 – GManNickG 2010-08-01 21:16:11
那麼,int(* p)[4] = new int [4] [4] ... dow可以調用delet嗎? 我嘗試: for(int i = 0; i <4; i ++) delete [] p [i]; delete [] p; 但它不起作用:( – 2010-08-02 13:39:09
@Farah_online:數組的大小並不重要,你總是用delete [] p;''''刪除數組''所以'p = new int [1] [4]; ''delete [] p'和'p = new int [4] [4];'...'delete [] p'調用數組成員(delete [] p [i]或'delete p [i]')無效。 – 2010-08-02 15:30:25
- 1. int * p =&a ++和int * p =&++ a
- 2. 應該int * p長int * p而不是?
- 3. 關於「int const * p」和「const int * p」
- 4. int p = *(int *)i和int p = *(int *)&i之間的區別
- 5. LFTP format_perms(int p)
- 6. int * p和int * p聲明之間的區別
- 7. 爲什麼{typedef int * PTR; const PTR p = #}不等於「const int * p = num」而是等於「int * const p = num」?
- 8. int ** p的奇怪行爲?
- 9. INT ++遞增4
- 10. int * p和int ** p之間的指針語法差異指針C++
- 11. int(* ip)[4]與int ip [4]之間的區別?
- 12. const int&x = 4和const int x = 4之間的區別
- 13. 動態二維數組:int(* ptr)[4] = new int [7] [4];
- 14. 爲什麼p在「int q [],p [];」是一個二維數組?
- 15. 爲什麼聲明空隙F(const int的* P)被修改p
- 16. 寫一個函數:短GetBits(短數據,INT P,INT N)
- 17. 什麼INT * V [10]和INT(* P)之間的差值[10]
- 18. 這是合法的C/C++嗎? `INT * P =(INT []){1,2,3};`
- 19. 問題<p></p> in Bootstrap 4,HTML和CSS
- 20. Ckeditor 4 - 刪除nbsp; <p></p>從word粘貼後
- 21. 化妝MP =((C ^((P + 1)/ 4))模p)在PHP?
- 22. 函數定義中的指針與數組:void fct1(int * p)和void fct1(int p [])有什麼區別?
- 23. int * p = somearray但(p + 1)不等於somearray的地址[1]。爲什麼?
- 24. 在p = new string [0]和p = new int [0]之後,爲什麼字符串版本在delete [] p時崩潰?
- 25. Swift 4將label.text int添加到按鈕int
- 26. Java數組 - 什麼類是「int [] intArray = new int [4];」一個實例?
- 27. 錯誤C2664:'way':無法將參數4從'int'轉換爲'int&'
- 28. C - 無法將1個參數從int轉換爲int [] [4]
- 29. 爲什麼sizeof(a)16? (sizeof int是4)
- 30. MVC 4自定義路由str和int
正如你可以從下面的答案中看到的。這種類型聲明的王是混淆和非直觀的,因此最好避免(除非你想添加過多的評論)。如果你使用其他的構造,你可以用更可讀的方式獲得相同的結果(例如std :: vector <>或boost :: array) – 2010-08-01 17:41:39
@Martin:'std :: vector <>'是一個完全不同的動物, int(* p)[4]'! – Seth 2010-08-01 17:58:00
@Seth:但是'int(* p)[4]'可能更好地替換爲二維的'std :: vector>'或一維'std :: vector '手動索引算術或'boost :: multi_array '。 –
fredoverflow
2010-08-01 18:02:23