加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 这是未定义的行为还是正常输出

发布时间:2020-12-16 10:35:25 所属栏目:百科 来源:网络整理
导读:这是一个非常简单的问题,但在序列点上甚至有一些疑问. int a[3] = {1,2,4};printf("%d",++a[1]); O / P 3 这是一个有效的c语句,我得到输出3,这意味着它是相同的 ++(a[1]) 但是这怎么可能,因为我们有一个预增量运算符,必??须先增加a,然后必须发生dereference.
这是一个非常简单的问题,但在序列点上甚至有一些疑问.

int a[3] = {1,2,4};
printf("%d",++a[1]);

O / P

3

这是一个有效的c语句,我得到输出3,这意味着它是相同的

++(a[1])

但是这怎么可能,因为我们有一个预增量运算符,必??须先增加a,然后必须发生dereference.

请纠正我的疑问.我们如何获得3?

解决方法

你的括号是正确的,你认为应该发生的理由显然是错误的.

如果你是对的,并且前缀增量具有比索引更高的优先级,那么对于格式错误的代码,你会遇到编译器错误,试图增加数组.

原样,绝对没有机会导致UB的排序错误等.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读