разница между * b = * b + 1 и * b ++ - PullRequest
3 голосов
/ 28 февраля 2020

Я пытаюсь изменить фактическое значение 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 не одинаковы?

Ответы [ 2 ]

7 голосов
/ 28 февраля 2020

Они не совпадают, первое выражение просто манипулирует указателем из-за приоритета оператора .

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

Это увеличивает указатель, а затем разыменовывает его. Вам нужны дополнительные скобки

(*b)++;
5 голосов
/ 28 февраля 2020

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

++ имеет более высокий приоритет, чем *b, поэтому *b++ равен *(b++)

+ имеет более низкий приоритет чем *b, поэтому *b+1 равно (*b) + 1

...