掌握C语言,必须要把基础知识夯实,那么就先从C语言的基础知识开始吧。
1. C语言基本词法
1.1 C语言字符集(C语言语法允许使用的字符的集合)
(1)小写字母26个;
(2)大写字母26个;
(3)数字字符10个;
(4)符号29个: _ { } [ ] # ( ) < > % : ; . ? * + - / ^ & | ~ ! = , \ " '
(5)空白符5个: 空格 Tab 回车换行 Ctrl+L Ctrl+K
C语言语法规定,连续多个空白符实际被看作一个,其间隔效果是一样的。
1.2 关键字(保留字)
37个关键字: auto break case char const continue default do double else enum extern float for goto if inline int long register restrict return short signed sizeof static struct switch typedef union unsigned void volatile while _Bool _Complex _Imaginary
1.3 标识符
所有用来表示变量名、常量名、语句标号、函数名、数组名和类型名的字符序列称为标识符。
(1)标识符只能由大小写字母、数字和下划线组成,且第一个字符必须是字母或下划线;(出现字母、数字、下划线之外元素或第一个字符是数字即为错误)
(2)标识符不能是关键字;(可以是main,define等,但不推荐)
(3)大小写会被认为是不同的字符;
2. 数据类型
类型 | char | short | int | long | long | float | double |
内存长度(字节) | 1 | 2 | 4 | 4 or 8 | 8 | 4 | 8 |
计算机中的单位:1 byte = 8 bit , 1 kb = 1024 byte , 1 mb = 1024 kb , 1 gb = 1024 mb , 1 tb = 1024 gb , 1 pb = 1024 tb
2.1 变量
2.1.1 整型
C语言的整型分为长整型【long (int)】、基本整型(int)和短整型【short (int)】。
整形数据的储存方式为二进制补码形式。
在此处引入原码、反码和补码的概念:
观察数字123与数字-123的存储方式如下
0 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | 1 |
1 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 1 |
注意点: ①存储数据时最高位为符号位,0表示正数,1表示负数
②正数的反码、补码与其原码相同
③负数的原码为直接按照正负写出的二进制序列,反码通过原码的符号位不变,其他位按位取反得到,补码是反码+1
1 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | 1 |
1 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
1 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 1 |
④便捷记忆:-1的补码为全1
⑤通过该底层原理,可以理解溢出现象的产生
2.1.2 浮点型(实型)
浮点型分为单精度(float)、双精度(double)和长双精度型(long double)。
2.1.3 字符型
注意:字符型可以存储整型数值(个位数字),因为其属于单字节字符。存储后内存中的数据是ASCII码值。
2.2 常量
常量指程序中不可修改的数据,分为字面常量(如 64,3.1415,‘A’等)和符号常量(由#define所定义的标识符常量)。
2.2.1 整型常量
整型常量有3种表示方式:
(1)十进制整数
(2)八进制整数。以0开头和0~7组成的整数,如0、012、0177
(3)十六进制整数。以0x或0X开头和0~9、A~F或a~f组成的整数,如0x1234 、0XAb、0x2cf
注意: 在一个整数值后面加一个字母l或L,则它是long型,例如-1L;
在一个整数值后面加一个字母u或U,则它是unsigned型(整数默认是signed型),例如168U、6535LU 。
C语言只有八、十、十六进制,无二进制。但运行时都需要转换成二进制来处理。
2.2.2 浮点型常量
浮点型常量有2种表示方式:
(1)小数形式。整数和小数可以省略其中之一。如1.234、.123、123.
(2)指数形式,又称科学计数法表示。以fEn或fen的格式组成,E或e表示以十为底的幂,n为指数且必须是整型,f可以是小数或整数。如3.1415可写作:0.31415e+1 , 314.15E-2 , 3.1415e0(e前e后必有数,e后必须为整数)
浮点型常量默认为double型,在浮点数后面加字母f或F,则是float型,如3.1415f , 3.1415E0F;在浮点数后面加字母l或L,则是long double型,如 .0012L , 1.2e-2L
2.2.3 字符常量
字符常量可以有3种不同的表示方式:
(1)以一对单引号括起来的一个字符表示字符常量,如'A' '0' '&',存储的是该字符的ASCII码值,单引号只能包括一个字符,如'AB'就是错的。
(2)转义字符
转义字符及其含义 | \a | \b | \f | \n | \r | \t | \v | \' | \" | \\ | \? | \0 | \ooo | \xhh |
含义 | 响铃符 | 退格符 | 进纸符,光标移到下一页开头 | 换行符,光标移到下一行开头 | 回车符,光标移到本行开头 | 水平制表符,光标跳转到下一个tab位置 | 垂直制表符 | 单引号 | 双引号 | 反斜线 | 问号 | 空字符 | 1~3位八进制数为码值对应的字符 | 1~2位十六进制数为码值对应的字符 |
(3)用ASCII码值表示字符常量
char a = 65 ;
printf("%c",a); //得到的输出结果:a
printf("%d",A); //得到的输出结果:65
2.2.4 字符串常量
以一对双引号括起来的零个或多个字符组成的字符序列为字符串常量。
'1'是字符,占一个字节;"1"是字符串,占两个字节(含有一个\0)