簡體   English   中英

二維指針數組

[英]2D array of pointers

我正在開發一個需要以下內容的應用程序。

const char List1[2][10] = {"Stack","Overflow"};
const char List2[2][10] = {"Goo","Gle"};
const char List3[2][10] = {"Face","Book"};
const char List4[2][10] = {"Pizza","Hutt"};

現在我必須將 List1,..,List4 存儲到另一個數組中,如下所述。

char **var_name[2][2] = { &List1, &List2, &List3, &List4};

我應該叫什么“var_name”? & 方法對嗎?

另外,如果我想使用 XYZ 打印“書”,那么我該如何打印呢?

List1是 10 個const char的兩個 arrays 的數組。 所以&List1是一個指向兩個 arrays 的 10 char數組的指針。 如果var_name是這些數組,它是一個指針數組,指向由 10 個const char的兩個 arrays 組成的數組。 您可以逐個構建該聲明:

  • var_name是一個數組……: var_name[]
  • ……指針: *var_name[]
  • …到兩個數組…: (*var_name[])[2]
  • …10 個數組…: (*var_name[])[2][10]
  • const char : const char (*var_name[])[2][10]

然后你可以定義和初始化它:

char (*var_name[])[2][10] = { &List1, &List2, &List3, &List4};

"Book"List3的元素 1 中,在var_name的元素 2 中,因此您可以使用(*var_name[2])[1]來引用它。

請注意,這需要* ,因為var_name[i]是一個指針。 這遵循您使用&List1初始化數組的示例代碼。 使用指向數組第一個元素的指針而不是指向數組的指針更為常見。 (memory中的地址相同,但類型不同。)

假設我們想消除這個不必要的指針級別並用{ List1, List2, List3, List4 }初始化var_name 像往常一樣在 C 中,那些 arrays 將自動轉換為指向其第一個元素的指針。 每個 arrays 的第一個元素是 10 個const char的數組。 因此,我們將使用指向 10 個const char的 arrays 的指針來初始化var_name

因此, var_name將是一個指向 10 個const char的 arrays 的指針數組。 同樣,我們可以逐個構建聲明:

  • var_name是一個數組……: var_name[]
  • ……指針……: *var_name[]
  • ... 到 10 的 arrays ...: (*var_name[])[10]
  • const char …: const char (*var_name[])[10]

那么定義和初始化就是:

const char (*var_name[])[10] = { List1, List2, List3, List4 };

現在List3的元素由var_name[2]指向,所以我們可以用var_name[2][1]來引用"Book"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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