我在做“艰难地学习C”中的指针练习,其中一个额外的学分是按相反的顺序打印循环,不管怎样,我只是想把练习做好,然后我想出了这个代码:
#include <stdio.h>
int main(int argc, char *argv[])
{
// create two arrays we care about
int ages[] = {23, 43, 12, 89, 2};
char *names[] = {
"Alan", "Frank",
"Mary", "John", "Lisa"
};
// safely get the size of ages
int count = sizeof(ages) / sizeof(int);
// set up the pointers to the start of the arrays
int *cur_age = ages;
char **cur_name = names;
// fourth way with pointers in a stupid complex way
for(cur_name = names, cur_age = ages; (ages - cur_age) >= count;
cur_name--, cur_age--){
printf("%s lived %d years so far.\n", *cur_name, *cur_age);
}
printf("---\n");
int i;
for(i = 0; i < 5; i++){
printf("%d\n", i);
}
return 0;
}
这段代码既没有警告也没有错误!跳过奇怪的for循环并打印最后一个循环。这个密码怎么了?谢谢您。
最佳答案
(ages - cur_age)
在循环开始时等于零,因此永远无法满足循环条件(ages - cur_age) >= count
。此外,使用减量运算符将导致未定义的行为,因为您已经从每个数组的第一个元素开始。