一系列的char指针

use*_*972 5 c c++ arrays pointers

我正在查看一些我没写过的代码,希望能帮助理解它的一个元素.代码存储字符数组,创建指向这些数组的指针(指定数组地址的指针).它看起来像然后创建一个数组来存储这些字符指针地址,我只想澄清我正在看的东西.我也很困惑在创建数组时使用double(**).

我已经在下面列出了我正在查看的简化示例.

char eLangAr[20] = "English";
char fLangAr[20] = "French";
char gLangAr[20] = "German";

char* eLangPtr = eLangAr;
char* fLangPtr = fLangAr;
char* gLangPtr = gLangAr;


char **langStrings [3]=
{
    &eLangPtr,
    &fLangPtr,
    &gLangPtr
};
Run Code Online (Sandbox Code Playgroud)

使用数组时,它们将它作为参数传递给函数.

menu (*langStrings[0]);
Run Code Online (Sandbox Code Playgroud)

所以我的想法是将字符数组值"English"传递给函数,但是我很难看到它.它们将菜单函数传递给存储在位置0的langStrings函数中的值的副本,这将是eLandPtr的地址?如果有人能用英语解释这个过程,那么我可以把它放在一边,这将是很棒的.这可能只是因为它已经过了漫长的一天,但它根本就不在我脑海里.

Pau*_*vie 6

你是正确的,langStrings包含指向字符数组指针的指针。所以每个langString[i]指向一个指针。该指针指向一个数组。该数组包含一种语言的名称。

正如其他人指出的那样,它看起来有点笨拙。我会详细说明:

char eLangAr[20] = "English";是一个包含 20 个字符的数组,名称“ English”被复制到其中。我不希望那个变量eLangAr会包含除此语言名称之外的其他内容,因此无需使用数组;一个常数就足够了。

char **langStrings [3]= ... 在这里,只有一个间接(一个 *)就足够了,因为似乎没有必要让指针指向其他任何东西(随机混洗语言?)。

总之,只要具备以下条件就足够了:

const char *langStrings [3]=
{
    "English",
    "French",
    "German"
};
Run Code Online (Sandbox Code Playgroud)

(请注意,const因为字符串现在是只读常量/文字。)


当这些语言名称在不同的语言中必须拼写不同时,给定的代码可能有用。于是“English”、“French”、“German”变成了“Engels”、“Frans”、“Duits”。但是,仍然有一层间接太多,以下内容就足够了:

char *langStrings [3]=
{
    aLangArr,
    fLangAr,
    gLangAr
};
Run Code Online (Sandbox Code Playgroud)


小智 0

** 表示指针到指针。当您必须为另一个指针存储指针时使用它。

eLangPtr 的值将是指向 eLangAr 的指针,其值为“English”