189 8069 5689

c语言函数中的自家自减 c语言自减什么意思

C语言的自加自减运算符

这两个都是未定义行为,因为(y++)+(y++)+(y++)里面没有顺序点,所以你无法保证执行完第一个y++之后,y的值是否增加了,如果增加了,那么第二个y++就会是6。

成都创新互联主营伽师网站建设的网络公司,主营网站建设方案,成都app软件开发,伽师h5成都微信小程序搭建,伽师网站营销推广欢迎伽师等地区企业咨询

只有顺序点才能确定一个副作用被实现,在这里,副作用就是确保y++之后,y加1。

下面的那个++y亦是同理。

至于什么是顺序点,可以参考这个:

C/C++语言定义(语言的参考手册)明确定义了顺序点的概念。顺序点位于:

1. 每个完整表达式结束时。完整表达式包括变量初始化表达式,表达式语句,return语句的表达式,以及条件、循环和switch语句的控制表达式(for头部有三个控制表达式);

2. 运算符 、||、?: 和逗号运算符的第一个运算对象计算之后;

3. 函数调用中对所有实际参数和函数名表达式(需要调用的函数也可能通过表达式描述)的求值完成之后(进入函数体之前)。

什么是C语言中关于自加自减?

自增分前缀自增和后缀自增。无论是什么,执行自增都有1个副作用,就是原来变量的值会增加1。例如int a=1;a++;或int a=1;++a;执行后,a==2。

而他们的区别就在于整个自增表达式的值不同。如(a++)的值是变量a自增以前的值,如上面例子,(a++)==1。而(++a)的值则是变量a自增以后的值,即(++a)==1+1==2。

结合性分为左结合和右结合,只有优先级相同时才看结合性,例如表达式a+b*c+d-e*f,因为乘法优先级别高于加减,所以a+(b*c)+d-(e*f),又因+-运算是左结合,所以只a+(b*c)再(a+(b*c))+d再(a+(b*c)+d)-(e*f),假如是右结合,就先d-(e*f),也就反过来了。这里其实看不出有什么区别,怎么样结果都一样。

但看到*p++运算就不同了,因为*与++运算同一优先级,左结合结果就是(*p)++,右结合就是*(p++),这是区别很大的,书上还很多例子,你可以自己去看的。

强制转换问题就是在可以转换的情况下按要求转换。如float x=9.9;

则(int)x==9。将实型转为整型是采用截掉小数部分的做法。

例如还可以整型转字符常量等等,例如,int a=97;则(char)a=='a',因为字符a的ASCLL码为97。

()里面即是你要转换的类型。

C语言的自加自减到底从函数哪里开始,从哪里结束?

我们一行一行分析:

for (x = 5; x 0; x--) //从x=5开始,当x0的值为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语言自加自减问题

计算:从右往左,并输出到“缓冲区”。

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级

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语言运算符

C语言中的自加自减

在这类表达式中,前++的优先级别最高,后++的运算级别最低(--和++一样,只讨论++,--道理相同)

++a+10为前++,所以首先进行a

的++运算,然后再+10,结果为11。

a+++10,注意不考虑前式子,那么还按a=0进行讨论,这里a是后++,所以先进行其他运算,所以是0+10=10,完成后,a才进行累加,虽然式子运算后,a的值都为1,但其中的获得时间是有差别的。


名称栏目:c语言函数中的自家自减 c语言自减什么意思
分享链接:http://cdxtjz.cn/article/hjepde.html

其他资讯