gpt4 book ai didi

c++ - 如何在 C++ 中访问 c​​onst char **& 中的数据?

转载 作者:行者123 更新时间:2023-11-28 00:02:12 24 4
gpt4 key购买 nike

示例代码:

const char* list[] = {"Elem_E", "Elem_T", "Elem_R", "Turtle", "Rabbit"};
const char ** patterns=0;
.
.
.
bool sec_run = false;
patterns = list;
process_data(patterns, sec_run);

处理数据函数:

process_data(const char **& pattern, bool sec_run){
.
.
some_variable=0;
for(int i; i < num_patterns;++i){
if(!sec_run){
some_variable = *pattern[i];
}
else{
if(/* list element contains "_" */)continue;
some_variable= /*letter after "_" */
}
if(some_variable == 'E') multiplier = 0;
else if(some_variable == 'T') multiplier = 1;
else if(some_variable == 'R') multiplier = 2;
}
}

这就是我正在尝试做的事情的基础。我无法更改 process_data 的签名。首先,我不明白 some_variable = *pattern[i]; 是如何返回 E、T 或 R 的,我也不知道如何迭代访问列表中的全部元素。即“Elem_E”检查下划线并解析 E。

我对 C++ 没有多少了解,但曾多次使用 C。我很难找到 char **& 的视觉表示来帮助基本理解这里发生的事情,如果你能指出一个好的教程的方向,视觉效果也足够了。

抱歉造成混淆,忘记了列表中的引号。

最佳答案

在 C++ 中,读取按引用传递的参数(使用 &)与读取按值传递的参数(不使用 &)的工作方式相同。当您分配给参数时会发生差异。如果参数是按值传递的,则赋值仅在函数内部可见,但如果是按引用传递,则赋值将在函数外部可见。

int mynumber = 0;

void foo(int &x)
{
printf("%d\n", x); //prints 0;
x = 10;
}

int main()
{
foo(mynumber);
printf("%d\n", mynumber); // prints 10
}

这在普通 C 中的等价物是将 x 参数变成一个指针并添加所需的 *& :

int mynumber = 0;

void foo(int *x)
{
printf("%d\n", *x);
*x = 10;
}

int main()
{
foo(&mynumber);
printf("%d\n", mynumber); // prints 10
}

回到你的代码,我真的不知道如何解决你所有的问题(常量 Elem_E 是什么意思?你的列表是 NULL 终止的还是某处存储了长度?)但我能说的是,只要你不想从 process_data 内部更改 patterns 全局变量,使用 char **& 将与使用 char ** 相同。

关于c++ - 如何在 C++ 中访问 c​​onst char **& 中的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38023618/

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