【发布时间】:2012-06-13 15:08:31
【问题描述】:
#include <stdio.h>
#include <stdlib.h>
void reprint(char *a[]) {
if(*a) {
printf("%d ",a);
reprint(a+1);
printf("%s ",*a);
}
}
int main() {
char *coll[] = {"C", "Objective", "like", "don't", "I", NULL};
reprint(coll);
printf("\n");
return EXIT_SUCCESS;
}
正如有经验的人会知道的那样,这会反向打印数组。我不太明白怎么做!
我需要帮助来了解 reprint(char *a[]) 的作用。我在一定程度上理解指针算术,但是通过在这里和那里插入printfs,我确定该函数递增到数组末尾,然后返回到开头,仅在向下打印时打印。但是,我不明白它是如何做到的;通过查看实际代码,我设法理解的是,如果 *a 不是 NULL,则在下一个索引处再次调用 reprint。
【问题讨论】:
-
printf("%d ",a);是未定义的行为,因为a是指针而不是 int -
@user411313 - 是的,那是个意外,本来应该是 *a
-
@capncoolio 并不能真正解决 user411313 发出的问题,但您可以使用 %p 打印指针。
-
@fvu 它打印一个内存地址(至少我认为是一个内存地址)。尽管如此,我还是输入了一些随机代码,试图看看它是如何“迭代”的(因此)
标签: c arrays pointers printing recursion