我在做“艰难地学习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。此外,使用减量运算符将导致未定义的行为,因为您已经从每个数组的第一个元素开始。

10-07 15:21