1.书上说自加运算符也是一种赋值运算符,那么它是不是总是最后参与运算?
2.str1[i++]=str2[j++]这个语句中,是先计算++在赋值 还是先计算str1[i]=str2[j],再将i j自加一运算?
需要分的可以说
C语言 自加运算符
答案:5 悬赏:70 手机版
解决时间 2021-03-01 08:54
- 提问者网友:放下
- 2021-02-28 15:11
最佳答案
- 五星知识达人网友:妄饮晩冬酒
- 2021-02-28 15:25
1 自加、自减i++,i--都是运算符; i++ 相当于 i=i+1 但是前者是一个运算符,后者是一个表达式,所以两者不能等同,只能说功能相当。既然 ++ -- 属于运算符,那么它就要按照运算符的优先等级来。
2首先要区分 i++ 与++i 前者先用了i 在i自加,后者相反;str1[i++]=str2[j++]这个语句中 是先算++在计算str1[i]=str2[j],但是因为i++ 先用了i在i自加,所以看不出区别。如果表达式是
str1[i++]=str2[i++];i=2的话,那么这个式子等价于 str1[1]=str2[2];
2首先要区分 i++ 与++i 前者先用了i 在i自加,后者相反;str1[i++]=str2[j++]这个语句中 是先算++在计算str1[i]=str2[j],但是因为i++ 先用了i在i自加,所以看不出区别。如果表达式是
str1[i++]=str2[i++];i=2的话,那么这个式子等价于 str1[1]=str2[2];
全部回答
- 1楼网友:末日狂欢
- 2021-02-28 17:40
呵呵,这个问题,钻牛角尖里了
a++; 没错,先运算 后自加;先取得a的值5,取完之后干什么呢?返回?其他运算?也没有要求它返回阿?也没有其他运算阿?所以 “先运算” 到此就完毕了,接着干什么?当然是 “自加”,a 就成了6了,输出6 难道有什么问题吗?
你还想等printf后再 “自加”? 那要没有printf直接返回了,岂不永远也自加不了了?
先运算 后自加 或者其他,都是说 “在表达式内部的先后次序”,离开这个表达式,运算已经完成了,a++后面的分号,表明表达式已经结束了
如果还不能理解,那就改行吧
- 2楼网友:英雄的欲望
- 2021-02-28 17:04
1. 之所以说它是赋值运算符,是因为++相当于做了 i = i + 1 的操作
2.str1[i++]=str2[j++]
先计算str1[i]=str2[j],此时i,j的值还是以前的值,然后 i = i + 1 ,j = j + 1,其目的就是为了把str2的个元素内容依次赋值给str1个元素的内容
如果是str1[++i]=str2[++j]
先是 i = i + 1 ,j = j + 1,此时i,j的值都比以前大1,然后才是str1[i]=str2[j]
- 3楼网友:青灯有味
- 2021-02-28 16:16
C语言中区分前自增与后自增,它们都有副作用,尤其是后自增。
前自增可能更好一点,它不产生临时变量,效率更高一些。
++y相当于:y=y+1;在变量的使用之前先自增。
y++相当于:y; 其它语句... y=y+1;也就是使用它时,它的值不变,在其使用之后的某一时刻但在再次使用它前其值加一。而且不同的编译器不一定有一致的实现行为。
a=(y++)+(y++)+(y++) 这是一条语句,通常的编译器实现会将此语句一次性扫描完成。这种情况下,y++会保持其值不变,此语句完成后,将y的值递增3次。
b=(++y)+(++y)+(++y)这也是一条语句,编译器扫描完此语句后,先将y递增3次,再作+运算,将运算结果赋予b,此时b应该为24。 但是不同的系统及编译器不一定这样实现,还有可能y依次递增,其结果是21。
- 4楼网友:轻熟杀无赦
- 2021-02-28 16:10
a++和++a, 前一个先把a用了 然后再给a加一,后一个 先把a自己增加一 然后 再 做运算;
例如:
x=5;
y=++x;
x先加到6,然后再将x的值应用到表达式y=x中,y值为6 x,y都为6
x=5;
y=x++;
x为6,y为5.
同样,对于你的数组也适用!
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯