gpt4 book ai didi

我可以使用变量名称列表动态访问变量吗?

转载 作者:行者123 更新时间:2023-12-02 08:07:45 24 4
gpt4 key购买 nike

我有一个变量列表 char [][20] ls = {"var_1", "var_2", ... , ""}

这是结构体的字段名称 struct {char var1[10], ...} my_struct;

struct 中的变量都是长度可变的 char[]。该列表本身是常量,不应在运行时更改。

我想以某种通用的方式在循环中访问这些变量。而不是调用 myfunc(my_struct.var1); myfunc(my_struct.var2); 等等,我宁愿有:

for (char * p = ls[0]; *p; p += sizeof(ls[0]))
{
myfunc(my_struct.{some magic that would put var_1 / var_2 here});
}

但我猜这是不可能的,因为循环是在运行时执行的,变量名需要在编译时可用。

我说得对吗?这里有什么可以做的吗? (不一定要这样,只是想知道我是否可以将这个例程打包成一个漂亮的循环)

最佳答案

由于所有成员都是同一类型的数组,您可以为每个成员创建一个地址数组并循环遍历它:

char *my_struct_addrs[] = { my_struct.var1, my_struct.var2, ... };
int i;
for (i=0; i < sizeof(my_struct_addrs) / sizeof(my_struct_addrs[0]); i++) {
myfunc(my_struct_addrs[i]);
}

由于每个数组的大小都不同,因此您需要注意不要越过每个数组的边界。您可以通过跟踪每个字段的大小并将其传递给函数来解决此问题:

struct addr_list {
char *addr;
int len;
};

struct addr_list my_struct_addrs[] = {
{ my_struct.var1, sizeof(my_struct.var1) },
{ my_struct.var2, sizeof(my_struct.var2) },
...
};

int i;
for (i=0; i < sizeof(my_struct_addrs) / sizeof(my_struct_addrs[0]); i++) {
myfunc(my_struct_addrs[i].addr, my_struct_addrs[i].len);
}

关于我可以使用变量名称列表动态访问变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49858015/

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