我以为我真的开始明白指针是如何工作的,然后我遇到了这个练习.我试图重新的代码块,我在我的"学习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++;
}
}
Run Code Online (Sandbox Code Playgroud)
它只是一个简单的函数,可以在不同的行上显示数组的单词.当我将它与书中的代码进行比较时,我看到了一个明显的区别.本书代码中的最后一行是'line ++'而不是'*line ++'.
我认为使用'line ++'与我们在这里尝试做的完全相反.我试图增加指针指向的位置,以及操纵存储在该内存地址的文件.'line ++'对我来说似乎很奇怪,因为我甚至不确定它告诉代码要做什么?从第[i]行移到第[i + 1]行?这似乎不可思议,因为那时"线"本身似乎只是作为一个指针 - 如果是这样的话,为什么我不能代替*线的每一个实例只用"行"?
在这种情况下,*line++并且line++完全相同.后缀的++优先级高于*.您可以使用以下代码替换代码:
*(line++)
Run Code Online (Sandbox Code Playgroud)
很容易看到这是不必要的.你在这里展示的程序正是你所说的 - 它想要将指针递增到指向下一个字符,这样它就可以测试它并打印它或换行符.你要line来引用指针,*line以解引用指针并得到任何它的指向.
我刚用你的代码做了快速测试.我收到gcc的警告"没有使用值计算" *.