c - 做了一些指针数学但不起作用

标签 c pointers

我正在尝试学习 c 语言中的指针,为此我重新设计了一个 for 循环以从末尾开始循环到开头。

int main(int argc, char* argv[]) {
    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);
    int i = 0;

    int* cur_age = ages;
    char** cur_name = names;

    // This is the original for loop:
    for (cur_name = names, cur_age = ages; (cur_age - ages) < count;
         cur_name++, cur_age++) {
        printf("%s lived %d years so far.\n", *cur_name, *cur_age);
    }

    // This is my version:
    for (cur_name = names + (count - 1), cur_age = ages + (count - 1);
         cur_age == ages; cur_name--, cur_age--) {
        printf("%s lived %d years so far.\n", *cur_name, *cur_age);
    }

    // I added this line and observed that cur_name is always equal to names +
    // 32
    // for example names: 0x7fff55268250, cur_name: 0x7fff55268270
    printf(" names: %p, cur_name: %p\n", names, cur_name);
}

问题是我的 for 循环版本没有打印任何内容,尽管我观察到指针的初始化实际上正在改变它们的值。我已经检查了数学,但仍然无法弄清楚为什么这不起作用。任何启示都将不胜感激。

最佳答案

你的循环条件错误,应该是cur_age >= ages,而不是cur_age == ages

按照您编写的方式,循环条件在第一次迭代时为 false,因此循环立即终止。

关于c - 做了一些指针数学但不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25454121/

相关文章:

c - 更新全局结构体的成员

c - 打开系统调用未按预期工作

c - '%s'期望参数类型为 'char *',但参数类型为 'int'

c - 我如何更正这个程序(结构和指针(?))?

c++ - gcc: undefined reference 错误

c++ - 如何以及何时与缓存行大小对齐?

c - 初始化迭代器指针 : Segmentation Fault

c - 使用 qsort、bsearch 帮助处理 C 中的指针

c - 这里有一个非常奇怪的错误 : dereferencing pointer to incomplete type

c++ - 如何在 C++ 函数中正确使用指针?