另一个C指针问题

sta*_*rob 1 c pointers

我以为我真的开始明白指针是如何工作的,然后我遇到了这个练习.我试图重新的代码块,我在我的"学习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]行?这似乎不可思议,因为那时"线"本身似乎只是作为一个指针 - 如果是这样的话,为什么我不能代替*线的每一个实例只用"行"?

Car*_*rum 9

在这种情况下,*line++并且line++完全相同.后缀的++优先级高于*.您可以使用以下代码替换代码:

*(line++)
Run Code Online (Sandbox Code Playgroud)

很容易看到这是不必要的.你在这里展示的程序正是你所说的 - 它想要将指针递增到指向下一个字符,这样它就可以测试它并打印它或换行符.你要line来引用指针,*line解引用指针并得到任何它的指向.

我刚用你的代码做了快速测试.我收到gcc的警告"没有使用值计算" *.