c语言如何理解 printf('%d,%d,%d",a++,a++,a++)

作者&投稿:豫心 (若有异议请与网页底部的电邮联系)
c语言如何理解 printf('%d,%d,%d",a++,a++,a++)~

根据你的问题,下了一个程序如下,你知道程序运行的结果是怎样的吗?

main(){
int a=1;
printf("%d,%d,%d
",a++,a++,a++);
printf("%d
",a);
}

运行后的结果如下,你能明白吗?
3,2,1
4


这个语句是明白了会明白C语言里面两个难懂的东西:printf("%d,%d,%d
",a++,a++,a++);

首先a++和++a是如何工作的:a++就是用a参与表达式的计算,然后把a+1的值存入a中;而++a相反,先加1在参与表达式的计算。

其次,函数里面的多个参数是表达式的时候,C语言是先计算后面的表达式的。

仔细理解我上面的两段话,你应该明白程序的输出结果了吧。

c语言中printf函数是显示输出函数,其中百分号后面的字符定义如下:
%a(%A) 浮点数、十六进制数字
%c 字符

%d 有符号十进制整数
%f 浮点数(包括float和doulbe)
%e(%E) 浮点数指数输出[e-(E-)记数法]
%g(%G) 浮点数不显无意义的零"0"
%i 有符号十进制整数(与%d相同)
%u 无符号十进制整数
%o 八进制整数
%x(%X) 十六进制整数0f(0F)
%p 指针
%s 字符串
%% "%"
至于
表示是换行的意思。

这个根本不需要理解,因为没什么意义,一是可读性太差,二是不同的编译器处理的结果也不同.所以讨论它没什么实际意义. 真正编程时也没有人会这么去写,在公司里这么写,马上被开了. 如果你非要想知道,最好看下c生成的汇编代码,看不明折也没关系,下面的意思是三个a先进入printf后,才加的1所以如果事先a为0,那么结果是3个06: printf("%d,%d,%d",a++,a++,a++);
00410A1F mov eax,dword ptr [ebp-4]
00410A22 mov dword ptr [ebp-8],eax
00410A25 mov ecx,dword ptr [ebp-8]
00410A28 push ecx
00410A29 mov edx,dword ptr [ebp-4]
00410A2C mov dword ptr [ebp-0Ch],edx
00410A2F mov eax,dword ptr [ebp-0Ch]
00410A32 push eax
00410A33 mov ecx,dword ptr [ebp-4]
00410A36 mov dword ptr [ebp-10h],ecx
00410A39 mov edx,dword ptr [ebp-10h]
00410A3C push edx
00410A3D push offset string "%d,%d,%d" (00427008)
00410A42 mov eax,dword ptr [ebp-4]
00410A45 add eax,1
00410A48 mov dword ptr [ebp-4],eax
00410A4B mov ecx,dword ptr [ebp-4]
00410A4E add ecx,1
00410A51 mov dword ptr [ebp-4],ecx
00410A54 mov edx,dword ptr [ebp-4]
00410A57 add edx,1
00410A5A mov dword ptr [ebp-4],edx
00410A5D call printf (004011e0)
00410A62 add esp,10h

最原始的Toub C语言是从右边往左计算,所以后计算的要加一。现在的C语言看这个结果,结果不变。

C 语言标准明确说了这种写法结果不确定,编译器甚至可以直接给出一个错误而拒绝编译。

C语言不能理解这种写法


泸水县18010554578: c语言逻辑运算符怎么理解? -
徵静如双: C语言中的逻辑运算符使用规则如下: 1、逻辑运算符是根据表达式的值来返回真值或是假值.在C语言中没有专门的真值和假值,认定非0为真值,0为假值. 2、逻辑运算符运算规则:|| 或:两个条件中,只要有一个成立,则结果就成立;&& ...

泸水县18010554578: C语言中的&是什么意思 -
徵静如双: &代表取地址,比如声明了int a = 5;那么系统自动给a开一块内存区域,这片区域内存放数值5.具体使用是这样的: printf("%d", a);输出a的值 printf("%d", &a);输出a的地址在scanf中使用&的原因是系统必须知道你要把值写入哪个地址,所以要取变量的地址.printf("%5.2f", a);的意思是让输出的数值在屏幕上占5位,小数点后保留2位 例如 printf("%.2f", a);意思就是小数点后保留2位输出 printf("%5f", a);意思就是让输出的数值在屏幕上占5位,不理解的话楼长试试就知道了

泸水县18010554578: &在c语言中什么意思 -
徵静如双: 主要有两个意思: 1. 取地址符,用在指针表达式或输出变量地址时 例如 int a; &a就是表示变量a在内存中地址 2. 二进制位与位运算符 1&1=1 0&0=0 拓展资料:C语言主要特点: 1. C语言是高级语言.它把高级语言的基本结构和语句与低级...

泸水县18010554578: 通俗地解释一下c语言中“printf”和“scanf”所代表的意思 -
徵静如双: printf是c语言标准输出函数,例如pintf(“你好”);输出"你好". scanf是c语言标准输入函数,例如scanf(“%d”,&a);,键盘输入一个整型数赋值给变量a.

泸水县18010554578: C语言中&,%d,int,return(0)都是什么意思?? -
徵静如双: &是一个运算符.& 运算符在C语言中有两个意义:1、取地址算符;所谓取地址应该这么理解:每一个变量在内存中都占用一定的空间,我们编程要对这个变量进行操作,就要通过它的空间逻辑地址来得到它、修改它.当然,关于地址理解远不...

泸水县18010554578: C语言中printf有什么作用 -
徵静如双: printf为C语言的格式化输出语句,可以将各种变量按照指定格式输出到命令行窗口中. 1 函数名: printf 2 定义: int printf(const char *fmt, ...); 3 头文件: stdio.h 4 功能:将fmt之后的参数列表,按照fmt中指定的格式输出到命令行窗口中. 5 用途: 1)输出程序运行结果. 2)当程序运行非预期时,通过输出相关信息,调试程序.

泸水县18010554578: C语言中 &和^是怎么回事? -
徵静如双: C语言中^与&都是位运算符,^是按位或运算,&是按位和运算.要知道,在计算机实际进行运算时,是把用户输入的数据转化成2进制进行运算的.比如1就会转化为00000001 而2会转化为00000010 ,那么a^b就相当于对这两个二进制数字中每一位都对应进行或运算.例如 00000001和00000010或运算时,两个数每一位只要有一个是1就是1,只有都为0时才为0, 因此结果为00000011 ,而这个结果与c进行位的和运算,即:对应位都为1才是1,否则为0 因此,00000011与3的二进制数00000011的和运算结果为00000011 在输出的时候计算机把二进制数转化为%d所表示的十进制数,即3输出

泸水县18010554578: acm的c语言题 下面两个printf 的三目运算符怎么理解 -
徵静如双: printf(c++ ? " %d" : "%d", b + m - 1); 可以分解为:如果c != 0 printf("%d", b + m -1 ); 如果 c == 0 printf("%d", b + m - 1); 然后c++ printf(n % m ? " %d\n" : "\n", b + n % m - 1); 可以分解为:如果n % m != 0 printf("%d\n", b + n % m - 1); 如果n % m == 0 printf("\n", b + n % m - 1);

泸水县18010554578: C语言中的运算符的&与&& 和 |与||有什么区别,用在什么地方 -
徵静如双: &和|是位运算.&&和||表示逻辑关系,&&和||表达式最终的值只可能是真(1)或者假(0),而位运算表达式的值不限于0和1 两者在特定情况下的效果是相同的.操作方法如下: 1、首先这里用到字符的ascii码,A的ASCII码为65,之后用scanf...

泸水县18010554578: C语言内部函数 printf() 具体是怎么写的 -
徵静如双: printf()函数是C语言中的格式化输出函数,包含在<stdio.h>库函数里,格式化输出是指按照一定的格式输出,具体写法为 printf("<格式化字符串>",<参数列表>); 例如: printf("Hello,world!\n"); 输出为: Hello,world! 如果要输出数据,则应使用格式控制字符,常用的有%d、%c、%f等等,例如: int a=1; printf("The number is %d.\n",a); 输出为 The number is 1.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网