C 中的字符串数组初始化

Fra*_* G. 1 c arrays string initialization

在 C 中,可以使用以下代码行初始化字符串数组:

char *exStr[] = { "Zorro", "Alex", "Celine", "Bill", "Forest", "Dexter" };
Run Code Online (Sandbox Code Playgroud)

在我的调试器上,数组初始化如下:

调试器视图

这与标准二维数组不同,标准二维数组中每个字符串占用相同的字节数;有人可以指出我正确的方向来理解:

  1. 声明“char *exStr[] = ...”的确切含义是什么;
  2. 如何从我的程序中重新创建相同变量的结构。

art*_*ban 5

声明“char *exStr[] = ...”的确切含义是什么;

它的意思是“从 poniter 到 char 的数组”。像“Zorro”这样的文字的字符数据通常放置在只读数据段中,数组元素仅包含文字的第一个字符的地址。

如何从我的程序中重新创建相同变量的结构。

你可以这样做:

char zorro[] = {'Z', 'o', 'r', 'r', 'o', '\0'}; // initialized every char for clarity
char alex[] = "Alex";
char celine[] = "Celine";
...
char* exStr[] = {
    &zorro[0], // explicitly referenced for clarity
    alex,
    celine,
    ...
};
Run Code Online (Sandbox Code Playgroud)