❶ c语言中自增运算符的困惑
++ 的运算等级确实高于 -;
但是如果是 i++的话,他的自增要等到遇到第一个分号 ;时候才自增,就是当前语句结束后,i才会自增,在这个语句结束前,它都是原来的值。
如果是++i的话就是先自增,这时候就能体现出++的运算等级高于-了;
如果你分不清,就记住如果++在后就是等该条语句结束后再自增,++在前就是先自增然后再运算。
❷ c语言的自增自减问题
计算:从右往左,并输出到“缓冲区”。
1、缓冲区是一堆栈
2、第一步:处理后面的“i--”。8进入缓冲区,i=7。缓冲区:8 <-(指针)
第二步:处理“i++”。7进入缓冲区,i=8。缓冲区:7 8<-
第三步:处理”--i“。8进入缓冲区,i=7.缓冲区:8 7 8
第四步:处理“++i” 先自增1,然后8进入缓冲区,i=8 .缓冲区: 8 8 7 8
3、输出缓冲区数据(栈规则):8 8 7 8
另外自增 、自减 、还可能和编译器有关系 。
(2)c语言自增到什么结束扩展阅读:
后缀表达式 2级
postfix-expression [ expression ],数组下标运算。
postfix-expression ( argument-expression-list),函数调用,括号内的参数可选。
postfix-expression . identifier,成员访问,
postfix-expression -> identifier,成员访问,->号之前应为指针。
postfix-expression ++,后缀自增
postfix-expression --,后缀自减
( type-name ) { initializer-list }
( type-name ) { initializer-list , } 复合初始化,C99后新增。
❸ C语言的自加自减到底从函数哪里开始,从哪里结束
我们一行一行分析:
for (x = 5; x > 0; x--) //从x=5开始,当x>0的值为false时停止循环。每次循环后x自减。
if (x-- < 5) printf("%d", x); //x--的值就等于x,也就是说第一次是不执行的。这个语句同时也会将x自减。
else printf("%d", x++); //x++的值也等于x,但同时也会将x自增。第一次会执行这个语句,输出为x-1(等于4),因为在判断语句中x自减了。
所以,第一轮输出为4。
第二轮,x因为for循环自减了,此时x-- < 5也已满足,又因为在上一轮循环中加1,因此输出4+1-1-1=2;
第三轮与第二轮相似,不同之处在于没有执行printf("%d", x++),因此x的值减2,输出1
❹ C语言后置自增什么时候自增(自减)
C语言中,后置自增(自减)是在执行完所在语句后,变量的值再自增(自减)。
举例说明如下:
intnum=0,s=0;
while(num++<3)
{
s=s+num;
}
//第1次执行while时,num=0,第1次执行完while后,num=1,此时,s=0+1=1
//第2次执行while时,num=1,第2次执行完while后,num=2,此时,s=1+2=3
//第3次执行while时,num=2,第3次执行完while后,num=3,此时,s=3+3=6
//第4次执行while时,由于num=4>3,所以推出循环,最后s=6
❺ C语言自增运算
k=(i++)+(++i)+(i++);
你可犯了个大的错误啊,你要想得出正解就要这样定义
int r, s, t;
r = ++i;
s = ++i;
t = ++i;
k = r + s + t;
因为分号是一个顺序点,C编译器k=(i++)+(++i)+(i++); 的编译顺序是任意的,它要,理论上所有++操作和赋值操作的副作用都要在分号之后才生成。但是这一点并不是强制编译器必须要等到分号结束之后才执行赋值操作,只是规定相邻两个顺序点之间的表达式求值所产生的副作用只有等到下一个顺序点结束才是确定的。而在这个顺序点结束之前,编译器对位于该个顺序点和前一个顺序点之间的表达式以任意顺序求值,k=(i++)+(++i)+(i++); 表达式都违反了C语言有关顺序点的规定,编译器给出的值也具有一定的任意性,没有人能确切地告诉你它们的值,你只能去问编译器了。所以我建议你不要这样写,以后做软件可要注意啊!
❻ C语言自增
(3*3+3*3)=18;
经过验证的
++i表示i先自加,然后参加运算,--i表示i先自减然后参加运算;
i++表示i先参加运算,然后才自加,--i表示i先参加运算,然后才自减;
上题中(i++*++i+i--*--i)整个式子中,i在参加运算前自加了一次,然后又自减一次(++i,--i),因此参加运算i的值不变,依然是3,运算结束后,i的值又自加了一次后又自减了一次(++i,--i),因此i的值还是没有改变,依然等于3.
所以运算结果时3
运算完毕后i=3;
回答完毕!
❼ 一个关于c语言自增运算的问题
我给你解释一下吧:
1
计算顺序:
先执行第一个 ++a 这时 a=4
再执行第二个 ++a 这时 a=5
这是执行第一个 加法 即 a+a=10 保存在一个临时变量(其实是CPU)的寄存器中
然后执行第三个 ++a 这时 a=6
最后执行一个 加法 10+a=16
2
先给这个表达式加上括号让你看清楚计算顺序
b=((++a)++)+a+(++a); 以下就一步步简单写出
++a a=4
a++ a=4 此处的自增在表达式结束后执行
a+a =8
a++ a=5
8+a =13 这就是结果
表达式结束后 a=6
楼主有兴趣多分析几个 以后就明白了,我也是刚才分析明白的
我们可以讨论
❽ 一个C语言程序是从()开始,到()结束
1。(main函数的开始)(main函数的结束)
2。a定义一个int型的二重指针b定义一个int型的指针c定义一个指向某个函数的指针d定义一个指针数组
3。b
4。实在没看懂
5。(4)(4)
6。第3个第4个
7。a
如果不懂可以随便问。。。
我也是新手,不过对楼下第七题答案表示怀疑。。。
ad两选项用vc++6.0调试都没有问题,但d显然是个没有意义的式子。。他只是做了一个除法,但并没有将结果赋给任何变量。。。
❾ c语言自增问题,优先级
关于自增的优先级,简单的可以这样理解:
a++; printf("%d ",a++); =>可以看做先printf("%d ",a); 然后再执行a=a+1;如果现在继续输出printf("%d ",a);你就可以发现最后这个a的值是上一个a值多加了1;
++a; printf("%d ",++a); =>可以看做先a=a+1;然后再执行printf("%d ",a);如果现在继续输出printf("%d ",a);你就可以发现最后这个a的值根上一个a值相等;
a--; printf("%d ",a--); =>可以看做先printf("%d ",a); 然后再执行a=a-1;
--a; printf("%d ",--a); =>可以看做先a=a-1;然后再执行printf("%d ",a);
下面是我举的例子(在vc++6.0运行的),可以帮助理解
---------- 2019.07.03 ----------
今天看到这道题,发现当年并没有细分析出执行结果,现做出一下补充:
x 值计算要这样分析:(编译器逻辑有下面基本逻辑)
1. "花括号操作符" 优先级大于 "加号操作符"
2. 两个连续的 "加号操作符" 执行时先执行第一个
3. 后自增只会在当前的所有操作执行完毕后才执行 (这一点是 x 值最重要的一点)
故需要将 x 分成两大部分执行
一、(a++) + (a++) => 根据上面逻辑1和逻辑2两点可以得到此时 a = 8; 第一部分得到 16; 此时要注意要符合 (逻辑3) 的要求 a 的后自增还未执行(后面还有加号操作)
二、16 + (a++) => 第二部分这里和容易可以看出就是先执行 16 + a => 16 + 8 = 24;
由于此时表达式已经没有其他操作符执行了即在我们看来执行结束了,但其实 a 的后自增并未执行,此时编译器还会去执行 a 的三次后自增; 故此时你 printf("%d ", a); 你能得到 a = 11;
y 值计算要这样分析:(编译器逻辑有下面基本逻辑)
1. "花括号操作符" 优先级大于 "加号操作符"
2. 两个连续的 "加号操作符" 执行时先执行第一个
3. 先自增会在当前的操作执行完毕后执行 (这一点是 y 值最重要的一点)
故需要将 y 分成两大部分执行
一、 (++a) + (++a) => 第一个加号先执行,但这里有花括号(逻辑3)所以 a 先自增两次此时得到 a = 13; 最后执行相加,此时第一部分值等于 26
二、 26 + (++a) => 第二个加号执行,这里也有花括号 a 先自增一次得到 a = 14;
最后执行相加,最终 y 等于 40
上面的分析是根据 VC++6.0 编译器进行的,其他编译器不一定正确。
❿ 一个C程序的运行是从什么开始到什么结束的
一个C语言的执行是从本程序的main函数开始,到main函数结束,但需要注意的是,也是有特殊情况的,若是代码中出现了exit函数,则直接结束程序。
C语言具有各种各样的数据类型,并引入了指针概念,可使程序效率更高,另外C语言也具有强大的图形功能,支持多种显示器和驱动器。而且计算功能、逻辑判断功能也比较强大,可以实现决策目的。
(10)c语言自增到什么结束扩展阅读:
注意事项:
唯一的指针常量是NULL,数组名也是指针常量,一个字符串常量出现在表达式中,所引用的值是该字符串常量的首地址。而不是字符。
静态存储:static修饰的变量,以及普通全局变量含(extern修饰的)。
typedef的作用:提高程序的可移植性,简化声明const的作用:定义只读变量。