【问题标题】:difference between *b= *b+1 and *b++*b= *b+1 和 *b++ 之间的区别
【发布时间】:2020-06-12 23:37:43
【问题描述】:

我正在尝试更改主函数中 a 和 b 的实际值。但是当我使用 *b++ 来增加 b 的值时。它不工作。

#include<iostream>

using namespace std;


int F(int *b,int *c ){
    *b++;
    *c++;

}
int main(){
    int a=1 , b=2;
    cout<<a<<" "<< b<<" ";
    F(&a, &b);

    cout<<a<<" "<< b;
}

但在第二种情况下,代码工作正常。

#include<iostream>

using namespace std;


int F(int *b,int *c ){
    *b = *b+1;
    *c = *c+1;

}
int main(){
    int a=1 , b=2;
    cout<<a<<" "<< b<<" ";
    F(&a, &b);

    cout<<a<<" "<< b;
}

*b++ 和 *b=*b+1 不一样吗?

【问题讨论】:

    标签: c++ pointers increment


    【解决方案1】:

    它们不一样,第一个表达式只是由于operator precedence而操纵你的指针。

    *b++;     // acts like *(b++)
    

    这会增加指针,然后取消引用它。你需要额外的括号

    (*b)++;
    

    【讨论】:

      【解决方案2】:

      https://en.cppreference.com/w/cpp/language/operator_precedence

      ++ 的优先级高于*b,所以*b++*(b++)

      + 的优先级低于*b,所以*b+1(*b) + 1

      【讨论】:

        猜你喜欢
        • 2015-02-21
        • 2021-05-20
        • 2017-09-12
        • 1970-01-01
        • 2017-12-24
        • 1970-01-01
        • 2012-06-26
        • 2019-12-18
        • 2016-05-04
        相关资源
        最近更新 更多