[英]Pointers with 2D arrays in c++
我正在開發一個使用二維字符數組的簡單程序,但我認為我的理解是錯誤的,因為我得到了一些奇怪的結果。 我做了一個處理所有文本的類。 我的構造函數看起來像這樣:
// I use char * <var_name> here, because it's what I've found while searching online,
// but I'm honestly not sure what it *actually* results in in the context of a 2D array
char *options[3][20] = {"text1", "text2", "text3"};
cout << x;
// this displays the same hex address (0x61fd20),
// whether x is options, options[0], *options, *options[0], &options or &options[0] - I have no idea why
然后,稍后在同一堂課中:
displayOptions () {
cout << &options; // outputs 0x61ff28 (slightly different address)
// any other modifier to options (as shown above) outputs nothing
我知道我應該一次只問一件事,所以我的最終問題是:我究竟如何初始化和顯示二維數組的內容?
如果與我為什么會出錯有關,為什么“選項”的所有這些不同變體都打印相同的內容,為什么在同一類中的不同方法中使用相同變量時會發生變化?
您必須添加第二個索引。
所以要獲得“Text1”,您可以使用options[0][0]
。 (您創建了一個 3x20 數組並且只初始化了第一行)
要初始化 2D 數組,請按這種方式對其進行格式化。 (順便說一句,應該查一下。基本的東西)
char *TwoD_example[x][y] = {a1,a2,a3, ...}, {b1, b2, b3, ...}, .....
編輯:忘記添加花括號...
char *TwoD_example[x][y] = {{a1,a2,a3, ...}, {b1, b2, b3, ...}, .....}
您不需要創建一個類來初始化和顯示二維數組的內容。
您可以使用循環初始化數組:
int **options = new int*[row_number];
for(int i=0;i<row_number;i++){
options[i] = new int[col_number];
}
您創建了一個指針數組。 還要記住,您應該使用delete
從堆中取消分配。
您可以訪問二維數組以顯示如下內容:
options[3][20]
數組數組不同於指針數組。 在您的代碼中,您的options
數組實際上是(指針數組的數組;不是開玩笑),並且可能是無意的。
為了更清楚地了解您的聲明,將char *options[3][20]
帶到cdecl.org (一個學習聲明語法的最棒的網站,值得收藏)給我們:
將選項聲明為字符指針數組 20 的數組 3
鑒於此,您似乎正在嘗試執行以下操作之一:
char[20]
的數組,並提供初始值。 其中只有一個,后者是數組數組。 前者是一個指向 const char
數據的指針數組。
指向const
字符串的三個指針的數組
字符串文字是const
,因此應如此對待。 還要注意3
是可選的,因為它可以從初始化中推斷出來:
char const *options[3] = {"text1", "text2", "text3"};
或者
char const *options[] = {"text1", "text2", "text3"};
char
數組數組
不需要指針。 您只需執行此操作(再次注意, 3
是可選的,因為它可以再次從初始化程序中推導出來):
char options[3][20] = {"text1", "text2", "text3"};
或者
char options[][20] = {"text1", "text2", "text3"};
這兩種方法之間的兩個最大區別
char
數組char
的數組)都是可變的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.