标题: 关于C语言数组赋值还是先++的问题,求解答 [打印本页]

作者: 27376054    时间: 2021-6-28 14:58
标题: 关于C语言数组赋值还是先++的问题,求解答
如题: buf[len++]=regGroup[i++]  这个数组赋值顺序是怎么样的,是不是先把regGroup[ i]的值先赋值给buf[len],然后i++,在然后len++??求大神指导下,还有C语言说的自右向左结合,不是特别明白

作者: daemondong    时间: 2021-6-28 15:59
你的理解没错,至于运算次序问题,没把握就加括号。
作者: 天ノ忆    时间: 2021-6-28 16:36
int i = 5;
printf("%d %d %d %d", i++, i, ++i, i++);
研究明白这个这一类型的都明白了
作者: glinfei    时间: 2021-6-28 17:10
前一半说的对,后一半不一定,不同编译器,顺序不同,但不影响你的结果啊。
作者: npn    时间: 2021-6-28 17:48
i++表示先返回后加1
++i表示先加1后返回
作者: jin111    时间: 2021-6-28 19:45
自右向左结合就是把reGroup[i++]的值赋给buf[len++];
作者: Hephaestus    时间: 2021-6-28 22:26
天ノ忆 发表于 2021-6-28 16:36
int i = 5;
printf("%d %d %d %d", i++, i, ++i, i++);
研究明白这个这一类型的都明白了

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

你这段代码纯粹是象牙塔里面的书呆子想出来的无意义代码,在c标准里面属于不确定行为,只能用于刁难学生,不同编译器输出的结果都不一样,如果工作中写出来会被经理打死。
作者: kinda11111    时间: 2021-6-28 22:33
先赋值再++
作者: 黄youhui    时间: 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++;
这和预想结果会有出入的,常规思维都是从左往右结合的

作者: cxc111    时间: 2021-6-29 15:21
建议可以直接上程序实验一下
作者: 天ノ忆    时间: 2021-7-3 16:11
Hephaestus 发表于 2021-6-28 22:26
楼主的代码起码是确定的,在任何编译器上面都可以得到同样的结果。

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

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

你的优先级理解就是错的,你的例子更是可笑的。
作者: Hephaestus    时间: 2021-7-4 02:03
天ノ忆 发表于 2021-6-28 16:36
int i = 5;
printf("%d %d %d %d", i++, i, ++i, i++);
研究明白这个这一类型的都明白了


visual c++ 2008 的结果
用TDMGCC 9.2 W64编译出来结果相同,我就不截图了。

作者: Hephaestus    时间: 2021-7-4 02:04
天ノ忆 发表于 2021-6-28 16:36
int i = 5;
printf("%d %d %d %d", i++, i, ++i, i++);
研究明白这个这一类型的都明白了


intel c++ 2013


作者: Hephaestus    时间: 2021-7-4 02:04
天ノ忆 发表于 2021-6-28 16:36
int i = 5;
printf("%d %d %d %d", i++, i, ++i, i++);
研究明白这个这一类型的都明白了



作者: Hephaestus    时间: 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标准严格禁止的。和伸手摸电门一样,写这种代码属于做死。

你让别人研究你的代码,居心何在???
作者: 51hei用户2107141    时间: 2021-7-13 11:28
先按照没加一之前的数运行,然后程序再运行到这一条语句时,i的值会加一
作者: 909493228    时间: 2021-9-17 10:01
i++是先赋值在+1
++i是先+1在赋值
作者: ctzs52    时间: 2021-9-18 10:06
首先,i++表示先返回后加1,++i表示先加1后返回;自右向左指的是将=右边的值赋给左边。
然后 buf[len++]=regGroup[i++]  这个数组赋值顺序个人感觉应该是把reGroup[i++]的值赋给buf[len++]




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1