我以为我真的开始理解指针是如何工作的,然后我遇到了这个练习。我试图重新创建我在“学习 C”一书中找到的一大块代码,我完成了它并且它正在运行,我认为一切都很棒:
void PrintWords( char *line ) {
bool inWord = false;
while (*line != kByteZero) {
if (! isspace(*line)) {
if (inWord == false) {
putchar('\n');
inWord = true;
}
putchar(*line);
} else {
inWord = false;
}
*line++;
}
}
这只是一个简单的函数,将数组中的单词分行显示。当我将它与书中的代码进行比较时,我发现了一个明显的区别。本书代码中的最后一行是“line++”而不是“*line++”。
我认为使用“line++”与我们在这里尝试做的完全相反。我试图增加指针指向的位置以及操作存储在该内存地址的文件。 'line++' 对我来说似乎很奇怪,因为我什至不确定它告诉代码做什么?从第 [i] 行移动到第 [i+1] 行??这看起来很奇怪,因为“line”本身似乎只是一个指针——如果是这样,为什么我不能用“line”替换每个 *line 实例?
最佳答案
在这种情况下,*line++
和line++
是完全一样的。后缀 ++
的优先级高于 *
。您可以将代码替换为:
*(line++)
很容易看到的是不必要的。您在此处显示的程序完全按照您所说的进行 - 它希望增加指针以指向下一个字符,因此它可以测试它并打印它或换行符。您希望 line
引用指针,*line
取消引用 指针并获取它指向的任何内容。
我刚刚对您的代码进行了快速测试。我收到来自 gcc 的警告“未使用计算的值”和 *
。
关于c - 另一个C指针问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3629662/