gpt4 book ai didi

c++ - 字符指针数组

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:27:52 25 4
gpt4 key购买 nike

我正在查看一些并非我编写的代码,并希望获得帮助以理解其中的一个元素。代码存储字符数组,创建指向这些数组的指针(将指针分配给数组地址)。看起来它然后创建了一个数组来存储这些字符指针地址,我只是想澄清一下我到底在看什么。我也对在创建数组时使用双 (**) 感到困惑。

我在下面包含了一个精简和简化的示例。

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
};

当使用数组时,他们将其作为参数传递给函数。

menu (*langStrings[0]);

所以我的想法是将字符数组值“English”传递给函数,但我不知道如何传递。他们向菜单函数传递存储在位置 0 的 langStrings 函数中的值的拷贝,这将是 eLandPtr 的地址?如果有人能用英语解释这个过程,这样我就可以理解它,那就太好了。这可能只是因为这是漫长的一天,但它根本不在我的脑海里。

最佳答案

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

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

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

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

总而言之,只需具备以下内容就足够了:

const char *langStrings [3]=
{
"English",
"French",
"German"
};

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


当这些语言名称必须在不同语言中拼写不同时,给定代码可能有用。所以“英语”,“法语”,“德语”变成了“恩格斯”、“弗朗斯”、“杜伊茨”。然而,仍然有一层间接寻址太多,以下就足够了:

char *langStrings [3]=
{
aLangArr,
fLangAr,
gLangAr
};

关于c++ - 字符指针数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48750307/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com