c语言x%3e%3e1 右移位,[C语言]易错知识点、小知识点复习(1)

1. 计算机只能识别由0和1组成的二进制指令,需要将用高级语言(如C、C++)编写的源程序(.c、.cpp)编译成二进制目标文件(.obj)。一个程序可以根据需要写在不同的文件里,编译是以文件为单位进行的,如果程序由两个文件组成,那么编译后就得到了两个目标文件。连接的作用就是将所有的目标文件和系统提供的类库相连接,组成一个可直接执行的二进制文件(.exe),这就是最后可以执行的程序。(想想为什么在程序开头#include,就可以在程序中调用数学函数了,是因为“连接”时,将数学库函数math.h和自己编写的程序连接在一起了,共同组成一个程序)

2. 编译时会对源程序进行词法检查和语法检查

3. 一个语句可以写在多行,一行可以写多个语句,语句以分号结束(#define宏定义的语句不适使用分号结束)

4. main()函数的函数体可以为空,如:void main(){ }

5. C程序总是在执行完main()函数的最后一条语句后结束[错]。如果程序运行崩溃,就执行不到最后,就退出了

6. 编译的基本单位是文件,文件的基本组成单位是函数(想一想编写的一个.c或.cpp文件里,除了#include头文件、#define宏定义、声明的全局变量和函数,就是一个个函数了(main函数也是函数))

7. 函数不能嵌套定义,只能嵌套调用(递归)

8. 常量:①十进制:数学上的数字 ②八进制:以0开头,由0-7数字组成,如012表示十进制数字10 ③十六进制:以0x开头,由0-9数字和a-e(A-E)字母组成,如0x2a表示十进制数字42(注意是数字0开头,不是字母O!)

9. 十进制与二进制、八进制、十六进制的互换

c659adc72200f30ef58460d7e69963e5.png

10. e或E之前必须要有数字,e或E之后必须要有整数数字。如1e2[√],e3[×],2.4e3[√],3e2.4[×]

11. 转义字符可能包含两个或多个字符(如

,12),但它只表示一个字符(

是一个字符,起到换行的作用,12表示十进制ASCII码为10的那个字符)。编译系统见到字符’

’时,会接着找它后面的字符,把反斜杠()和其后字符当作一个字符,在内存中只占一个字节

12. 反斜杠后面加数字的情况,有两种。( 表示空字符,这里不考虑它了)

①ddd :ddd是一个数的八进制表示,ddd所对应的字符是ASCII码值的八进制表示为ddd的那个字符。如12,这里12是八进制形式,它对应的十进制是10,所以12就表示ASCII码为10的那个字符。

②xhh:hh是一个数的十六进制表示,xhh所对应的字符是ASCII码值的十六进制表示为hh的那个字符。如x12,这里12是十六进制形式,它所对应的十进制是18,所以x12就表示ASCII码为18的那个字符。

问:1.怎么知道反斜杠后面的数字是什么进制?

反斜杠后面不能直接加十进制,如果加的是十六进制,在反斜杠后面要加上x,这是一个标志。所以如果是12,则说明这是八进制;如果是x12则是十六进制。

所以18这种写法就是错的,没有x这标志,18就只能是八进制形式,但又出现了8,所以矛盾,错误。

13. 字符要在单引号之间(‘ ‘),如果想表示一个单引号,需要这样写:’   如果想表示一个反斜杠,需要这样写:\

14. 标识符命名以字母或下划线_开头,由字母、下划线和数字组成。即开头第一个字符不能是数字,标识符长度不能超过255个字符

15. 关于自增、自减运算

i++是先进行运算,然后i递增1;++i是i先递增1,然后参与运算。注意这里i++或++i的这条性质是对于i++或++i与别的式子放在一起时来说的,如果表达式中只有i++或++i这一个式子,那就没有这个区别。如在for(表达式1;表达式2;i++)和for(表达式1;表达式2;++i)的作用是一样的。

自增运算符(++)和自减运算符(--)必须作用于变量,不能对常量进行。因为i++等价于i=i+1,是个赋值表达式。而赋值表达式左边的值(称为左值)不能是常数或表达式,只能是变量。

如int i=2,i++之后i=3或者++i之后i=3;但是不能写成这样:(i++)++。这种形式是错的,因为i++之后是3,是个常数,不能再进行++;同样的,i--/=5这种写法也是错的。

16. 强制类型转换的格式

(数值类型)变量,如:int i=2,想把i变成float型,需要这样写:(float)i

17. C语言本身不提供输入输出语句,printf(),scanf()是stdio.h头文件中提供的

18. 混合赋值表达式要注意括号的问题。

如a*=b+c等价于a=a*(b+c)而不是a=a*b+c,要注意这一点

int a=0,m=3,k=15   则a=++m*k+m运算后,a=64,m=4,k=15.

赋值表达式先计算赋值运算符右边表达式的值,再把这个值赋值给左边的变量a。要注意表达式++m*k+m是从左往右算的,m++之后m的值已经改变了,第二个m的值已经是改变后的值了

19. 数学式3xy/5ab,变量x,y为整型,a,b为浮点型,C程序中对应的正确表达式为:

A.3/5*x*y/a/b  B.3*x*y/5/a/b  C.3*x*y/5*a*b  D.3/a/b/5*x*y

选D。A中3/5为0,整个式子就等于0了;B中3*x*y都是整数,再除以5是整除,而不是数学意义上的除法;C和B一样;D中3/a为整数除以小数,在C语言中结果为小数,正确

20. int整型在有的编译器里分配4个字节(如Visual C++),有的分配2个字节。如果题目告诉sizeof(int)=2,则说明分配了2个字节

VC中,int占4个字节,数值范围为(-2^31,2^31-1);short占2个字节,数值范围为(-2^15,2^15-1);char占1个字节,数值范围为(-2^7,2^7-1)。这涉及到原码、反码和补码的知识,一个字节是8个二进制位,一个二进制位只能表示0或者1这两个数字

21. unsigned int存储的正数范围比[signed] int几乎大了一倍

22. 把一个字符赋值给一个字符变量,并不是把该字符本身放到内存中去,而是把这个字符所对应的ASCII码的二进制形式放到内存单元中。字符变量和整型变量是可以通用的,是互相兼容的,可以相互赋值,也可以进行算术运算。在printf()中%d输出整数,%c输出字符。但是要注意字符变量和整型变量能用的字节数是不同的,相互赋值或运算可能会导致溢出或截断

23. 字符串常量大小的问题。”abc”是一个字符串常量,它的大小是4,即sizeof(“abc”)=4.这是因为编译系统会在字符串最后自动加一个’

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值