c - 指向 char 的指针 - 增量运算符

标签 c pointers operators

<分区>

恐怕我没有正确理解运算符之间的优先级。以下程序的工作方式与预期不同:

#include<stdio.h>

int main(){
    char a[] = "abc";
    char *p;
    int i;

    p = a;
    for(i = 0; i < 3; ++i)          /* First case */
        printf("%c\n", *p++);

    printf("a = %s\n", a);

    p = a;

    for(i = 0; i < 3; ++i)        /* Second case */
        printf("%c\n", (*p)++);
    printf("a = %s\n", a);

    return 0;
}

第一种情况:根据这个table , *p++*(p++)。我递增 p 指向的地址,然后我取消引用它。为什么它返回 abc,而不是 bc + "value beyond string"

我在第二种情况下遇到了类似的问题,表达式为 (*p)++。在这种情况下,括号使我增加了 p 的去引用值。因此,我希望表达式返回 bcd 而不是 dbc

最佳答案

在第一种情况下,它在返回值后执行指针递增,因为该操作是递增。

在第二种情况下,您在循环中递增 *p 3 次而不更改 p 本身的值。因此 a 的第一个元素(p 指向)递增 3 次导致 'a'+3='d'。其余元素保持不变。

关于c - 指向 char 的指针 - 增量运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47579030/

相关文章:

c - 使用链表的 RPN 计算器

c - 多维数组的大小

字符串中的字符搜索

c - C语言中如何通过指针传递二维数组?

c++ - C++中如何使用虚函数实现多态行为?

java - java中的^运算符

c - 这个程序创建了多少进程?

c++ - 取消引用被转换为双指针的指针

C++ 比较运算符不返回 true 或 false

c++ - 异或两个变量并将结果添加到第三个变量适用于运算符 += 但不适用于运算符 = 和 + 组合使用