关于i++、+=i++及括号

本文详细解析了i+=i++运算的内部机制及编译器处理方式,通过实例展示了这种运算在不同情况下的行为,帮助读者深入理解C语言中自增运算符的复杂用法。

i+=i++;
j=j++;
a=a+a++;
b=b+(b++);
c=c+(++c);

编译器地址
http://www.runoob.com/try/runcode.php?filename=helloworld&type=c

i++的原理:

int a = *i:
*i = *i+1;
return a;

举例:

int i=0;
i=i++;

在这里插入图片描述

int i=0;
i+=i++;

在这里插入图片描述

int i=1;
i+=i++

在这里插入图片描述

	int i = 0;
	int j = i;
	int a = i;
	int b = i;
	int c = i;
	int d = i;
	i+=i++;
	j=j++;
	a=a+a++;
	b=b+(b++);
	c=c+(++c);

在这里插入图片描述

在C语言中,`i++` 是一个后缀自增运算符,其行为是先使用变量的当前值,然后将该变量加1。当 `i++` 被加上括号时,例如 `(i++)`,括号的作用是改变表达式中运算符的优先级,从而影响表达式的计算顺序。 ### 括号对 `i++` 运算的影响 #### 1. **运算符优先级** - 在C语言中,括号 `()` 的优先级是最高的,这意味着括号内的表达式会首先被计算[^3]。 - 因此,当 `i++` 被放在括号中时,`(i++)` 会被优先执行。也就是说,在包含 `(i++)` 的表达式中,`i` 的当前值会被先使用,之后 `i` 才会自增1。 #### 2. **结合性** - 尽管括号改变了运算符的优先级,但结合性仍然决定了相同优先级的运算符如何结合。对于括号内的 `i++`,它本身是一个后缀运算符,具有从右到左的结合性[^2]。 - 然而,由于括号的存在,整个表达式的计算顺序可能会受到影响。例如,在表达式 `a = (i++) + j;` 中,`(i++)` 会先于 `+` 和 `=` 运算符执行,因为括号提高了 `i++` 的优先级。 #### 3. **示例分析** 假设 `i = 5`,考虑以下几种情况: - **不加括号的情况**: ```c int a = i++ + 3; ``` 在这个例子中,`i++` 的优先级低于 `+`,但由于 `i++` 是后缀运算符,它的实际效果是在表达式结束后才发生。因此,`a` 的值为 `5 + 3 = 8`,而 `i` 的值变为 `6`。 - **加括号的情况**: ```c int a = (i++) + 3; ``` 加上括号后,`(i++)` 的优先级被提升到最高,因此 `(i++)` 会立即执行。此时,`i` 的当前值 `5` 会被用于计算 `a = 5 + 3 = 8`,之后 `i` 自增为 `6`。 - **多个括号嵌套的情况**: ```c int a = ((i++)) + 3; ``` 即使有多个括号嵌套,结果与单个括号的情况相同。括号不会改变 `i++` 的行为,只是确保了 `i++` 会在其他运算之前执行。 ### 总结 - **优先级**:括号 `()` 提高了 `i++` 的优先级,使其成为最先执行的操作之一[^3]。 - **结合性**:虽然 `i++` 是从右到左结合的运算符,但在括号内,它仍然遵循后缀自增的行为,即先返回当前值,再进行自增操作[^2]。 - **执行顺序**:在 `(i++)` 中,`i` 的当前值会被立即使用,随后 `i` 自增1。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值