找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2372|回复: 18
收起左侧

关于C语言数组赋值还是先++的问题,求解答

  [复制链接]
ID:929847 发表于 2021-6-28 14:58 | 显示全部楼层 |阅读模式
如题: buf[len++]=regGroup[i++]  这个数组赋值顺序是怎么样的,是不是先把regGroup[ i]的值先赋值给buf[len],然后i++,在然后len++??求大神指导下,还有C语言说的自右向左结合,不是特别明白
回复

使用道具 举报

ID:827243 发表于 2021-6-28 15:59 | 显示全部楼层
你的理解没错,至于运算次序问题,没把握就加括号。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:139866 发表于 2021-6-28 16:36 | 显示全部楼层
int i = 5;
printf("%d %d %d %d", i++, i, ++i, i++);
研究明白这个这一类型的都明白了

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:844772 发表于 2021-6-28 17:10 | 显示全部楼层
前一半说的对,后一半不一定,不同编译器,顺序不同,但不影响你的结果啊。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:57657 发表于 2021-6-28 17:48 | 显示全部楼层
i++表示先返回后加1
++i表示先加1后返回

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:899569 发表于 2021-6-28 19:45 | 显示全部楼层
自右向左结合就是把reGroup[i++]的值赋给buf[len++];

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:883242 发表于 2021-6-28 22:26 | 显示全部楼层
天ノ忆 发表于 2021-6-28 16:36
int i = 5;
printf("%d %d %d %d", i++, i, ++i, i++);
研究明白这个这一类型的都明白了

楼主的代码起码是确定的,在任何编译器上面都可以得到同样的结果。

你这段代码纯粹是象牙塔里面的书呆子想出来的无意义代码,在c标准里面属于不确定行为,只能用于刁难学生,不同编译器输出的结果都不一样,如果工作中写出来会被经理打死。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:931825 发表于 2021-6-28 22:33 | 显示全部楼层
先赋值再++
回复

使用道具 举报

ID:592807 发表于 2021-6-29 10:04 | 显示全部楼层
天ノ忆 发表于 2021-6-28 16:36
int i = 5;
printf("%d %d %d %d", i++, i, ++i, i++);
研究明白这个这一类型的都明白了

你这是像干嘛呢?
int i = 5;
printf("%d %d %d %d", i++, i, ++i, i++);
在实际工作里面是不会这么写的,不会在printf()函数里面这么调用变量的,因为会出问题的。
printf()是一个官方函数,它不是说从左往右处理一个变量发送一次数据,
不是
i++;
i;  
++i;
i++'
可能会有部分编译器是这样做的。
但是很多编译器从右往左的。也就是
i++;
++i'
i;
i++;
这和预想结果会有出入的,常规思维都是从左往右结合的

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:946739 发表于 2021-6-29 15:21 | 显示全部楼层
建议可以直接上程序实验一下
回复

使用道具 举报

ID:139866 发表于 2021-7-3 16:11 | 显示全部楼层
Hephaestus 发表于 2021-6-28 22:26
楼主的代码起码是确定的,在任何编译器上面都可以得到同样的结果。

你这段代码纯粹是象牙塔里面的书呆 ...

难不成工作中会有人这样写?只是用这个例子来理解运算优先级,你刚开始学代码的时候还知道有什么编译器吗?
回复

使用道具 举报

ID:883242 发表于 2021-7-3 17:09 | 显示全部楼层
天ノ忆 发表于 2021-7-3 16:11
难不成工作中会有人这样写?只是用这个例子来理解运算优先级,你刚开始学代码的时候还知道有什么编译器吗 ...

你的优先级理解就是错的,你的例子更是可笑的。
回复

使用道具 举报

ID:883242 发表于 2021-7-4 02:03 | 显示全部楼层
天ノ忆 发表于 2021-6-28 16:36
int i = 5;
printf("%d %d %d %d", i++, i, ++i, i++);
研究明白这个这一类型的都明白了

51hei图片20210704020044.png
visual c++ 2008 的结果
用TDMGCC 9.2 W64编译出来结果相同,我就不截图了。
回复

使用道具 举报

ID:883242 发表于 2021-7-4 02:04 | 显示全部楼层
天ノ忆 发表于 2021-6-28 16:36
int i = 5;
printf("%d %d %d %d", i++, i, ++i, i++);
研究明白这个这一类型的都明白了

51hei图片20210704015823.png
intel c++ 2013

回复

使用道具 举报

ID:883242 发表于 2021-7-4 02:04 | 显示全部楼层
天ノ忆 发表于 2021-6-28 16:36
int i = 5;
printf("%d %d %d %d", i++, i, ++i, i++);
研究明白这个这一类型的都明白了

51hei图片20210704015559.png
回复

使用道具 举报

ID:883242 发表于 2021-7-4 02:07 | 显示全部楼层
天ノ忆 发表于 2021-6-28 16:36
int i = 5;
printf("%d %d %d %d", i++, i, ++i, i++);
研究明白这个这一类型的都明白了

我手头还是六种以上的c语言编译器,已经没有必要继续测试了。

只用了4种编译器测试你的代码,就出现了3种截然不同的结果,你的这种写法,是C标准严格禁止的。和伸手摸电门一样,写这种代码属于做死。

你让别人研究你的代码,居心何在???

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:952494 发表于 2021-7-13 11:28 | 显示全部楼层
先按照没加一之前的数运行,然后程序再运行到这一条语句时,i的值会加一
回复

使用道具 举报

ID:966680 发表于 2021-9-17 10:01 | 显示全部楼层
i++是先赋值在+1
++i是先+1在赋值
回复

使用道具 举报

ID:966901 发表于 2021-9-18 10:06 | 显示全部楼层
首先,i++表示先返回后加1,++i表示先加1后返回;自右向左指的是将=右边的值赋给左边。
然后 buf[len++]=regGroup[i++]  这个数组赋值顺序个人感觉应该是把reGroup[i++]的值赋给buf[len++]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表