c - 另一个C指针问题

标签 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++;
    }
}

这只是一个简单的函数,将数组中的单词分行显示。当我将它与书中的代码进行比较时,我发现了一个明显的区别。本书代码中的最后一行是“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/

相关文章:

c - 对 GLib 友好的 MD5 例程?

C 编程比较 float

c - 防止 getdate_r 填写它不知道的数据

c++ - 将指针转换为容器类型中的 const

c - 在其字段中声明指向结构的指针

c++ - `this == &x` 是确定指针 (this) 和引用 (x) 是否指向同一对象的正确方法吗?

c - 从链表中删除节点时出现 SIGSEGV 段错误

c - 优化位运算

c - 为什么这段代码不起作用?它涉及在c中使用指针和函数

c - STM32F4 ADC DMA 配置不工作