簡體   English   中英

C++ 中帶有二維數組的指針

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM