gpt4 book ai didi

c - 初始化结构数组的最佳解决方案是什么?

转载 作者:行者123 更新时间:2023-11-30 19:08:39 25 4
gpt4 key购买 nike

第一个解决方案:

struct str {
char *name;
int flag;
};

enum {
HELP,
OUTPUT,
OTHER
};

typedef struct str table;

table arr[] = {
{ "help", HELP },
{ "output", OUTPUT },
{ NULL, OTHER },
};

int main(int argc, char **argv) {
table *opt = arr;
printf("%s\n", (opt+HELP)->name);
printf("%s\n", (opt+OUTPUT)->name);
return 0;
}

第二个解决方案:

struct str {
char *name;
int flag;
};

enum {
HELP,
OUTPUT,
OTHER
};

typedef struct str table;
table arr[OTHER];

void start_table() {
arr[HELP] = (struct str) { "help", HELP };
arr[OUTPUT] = (struct str) { "output", OUTPUT };
arr[OTHER] = (struct str) { NULL, OTHER };
}

int main(int argc, char **argv) {
start_table();
table *opt = arr;
printf("%s\n", (opt+HELP)->name);
printf("%s\n", (opt+OUTPUT)->name);
return 0;
}

什么是最好的?如果我添加或更改数组的任何元素,第二个解决方案会自动更改,但有效吗?最好是枚举还是使用 #define 预处理器指令?

最佳答案

这要看情况!

  • 当可以使用初始化时,就使用它 - 因此第一个解决方案通常更好,特别是如果代码从不更改结构(数组)内容。
  • 如果您的代码可以更改内容,但可能需要能够重置为原始状态,那么初始化函数就变得更合适,并且使用直接初始化是不合适的。

不存在“最佳”解决方案;什么是最好的取决于您需要对数组做什么。

关于c - 初始化结构数组的最佳解决方案是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44739151/

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