我正在尝试学习 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/