gpt4 book ai didi

c "each"宏不迭代所有元素

转载 作者:太空宇宙 更新时间:2023-11-03 23:46:04 25 4
gpt4 key购买 nike

这是我的代码,我发现“each”宏只迭代第一个元素并输出“s1”,如何让它迭代所有元素?

#include "stdio.h"

#define each(item, array) \
for (int keep = 1, count = 0, size = sizeof(array) / sizeof *(array); keep && count != size; keep = !keep, count++) \
for (item = array[count]; keep; keep = !keep)

char *join(char const *ss[]) {
char *r = "";
each(char *s, ss) {
puts(s);
}
return (r);
}

int main(int argc, char **argv) {
char const *ss[] = {"s1", "s2"};
join(ss);
};

最佳答案

如果您从 main 调用 each,即定义 ss 的地方,您的程序将按预期工作:

int main(int argc, char **argv) {
char const *ss[] = {"s1", "s2"};

each(char *s, ss) {
puts(s);
}
};

之所以有效,是因为 each 可以访问 ss 声明,因此 sizeof a/sizeof *a 等于数组中的元素数.

问题是,如果您将 ss 数组传递给另一个函数(例如 join),它会 decays to pointer .由于join中的ss是一个指针,sizeof array不再指代数组的大小,表达式sizeof a/sizeof *a 产生 sizeof(char**)/sizeof(char*) 在您的平台上是 1

另见

What is array decaying?

关于c "each"宏不迭代所有元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33385152/

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