测试++、--前后缀、=赋值、指针引用优先级

    技术2026-01-10  13

    i++ 与 ++i 的主要区别有两个: 1、 i++ 返回原来的值,++i 返回加1后的值。 2、 i++ 不能作为左值,而++i 可以。

    本来我想当然的以为在C语言中指针预算符的优先级肯定比++高,后来在写程序时发现并没有这么当然。 在C语言中,自增运算符++和指针运算符*的优先级关系为 左++ > * > 右++

    比如 ++ *i 相当于 ++ (*i) ,指针i对应的变量+1。

    *i ++ 相当于 * (i++) ,指针i,也就是地址值 +1(其实是加1个变量所占的地址空间)

    #include "stdafx.h" #include<iostream> using namespace std; //用于测试++、--前后缀、=赋值、指针引用 //++、--后缀优先级最高,结合性L-R(从左到右) //++、--前缀以及*间接引用优先级次之并位于同一优先级组,结合性R-L //=赋值运算法优先级最低,结合性R-L int main() { int a = 10, b = 9, c = 8; //a = b++;//相当于标准库中的运算符是一个函数,b是对象,函数返回的是原值,也就是赋值给a返回值,但是经过计算后,i加1了 //cout << "++与赋值=:" << a << endl; int* p = &c; int* p1 = &a; ++*p = *p1++; cout << "a=" << a << endl << "c = " << c << endl; return 0; } 分析:++*p = *p1++; 首先由右向左,*p1++中++后缀优先级大于*,所以应该先执行++,但是++返回的是加之前的内容,即返回的是*p1为10;所以首先++*p = 10;然后p的指针加1;所以p指向了未知内存。在分析++*p = 10;*优先级大于++前缀,所以*p = *p+1;所以c变为了9,然后就是*p = 10;进行赋值,最终c=10;
    Processed: 0.013, SQL: 9