当你成为C语言的高手,那么你就很容易进入到操作系统的平台里去;当你进入到系统的平台里实际做程序时,就懂得进行调试;当你懂得调试的时候,你就会发现能轻而易举地了解整个平台的架构。这时候,计算机基本上一切都在你的掌握之中了,没有什么东西能够逃出你的手掌心。 —《编程箴言》梁肇新
C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。
尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。
二十世纪八十年代,为了避免各开发厂商用的C语言语法产生差异,由美国国家标准局为C语言订定了一套完整的国际标准语法,称为ANSI C,作为C语言最初的标准。
计算机:
编译(obj)—>链接—>exe, 点击感叹号之后,请求计算机执行exe程序,所有的软件都是在操作系统的基础上运行完成的,win2000之后所有的软件都不能直接访问电脑硬件
单精度浮点数--float--(四个字节)
双精度浮点数--double--(八个字节)
字符类型 (单个字符char、字符串)
结构体
枚举
共用体(基本被淘汰)
int i;
i=3;
3最终是存放在内存中,程序终止之后3所占的空间被释放出来,放在内存中,什么位置不知道,反正是放在之前空闲的内存条中了,i与内存条中的那个空闲单元相对应。变量的本质就是内存中的一段空间。系统执行的时候,VC++6.0软件向操作系统发出请求,操作系统为变量分配内存空间。
变量使用前必须初始化,变量i(对应内存条空间),若i没有初始化,i的值可能是以前这个内存空间存放的,随机值或者系统会自动存放一个以8开头的很大的值,可以提醒程序员没有初始化。
软件运行与内存的关系:
1、软件在运行前需要向操作系统申请存储空间,在内存空间足够时,操作系统将分配一段内存空间并将外存中软件拷贝一份存入该内存空间中,并启动该软件的运行!(如放一部电影)
2、在软件运行期间,该软件所占内存空间不再分配给其他软件。
3、当软件运行完毕,操作系统将收回该内存空间(注意:操作系统并不清空该内存空间中遗留下来的数据),以便再次分配给其他软件使用。
综上所述,一个软件所分配到的空间中极可能存放着以前其他软件使用过的残留数据,这些数据被称为垃圾数据。所以通常情况下我们为一个变量或一个数组,分配好存储空间之后都要对该内存空间初始化!
//只读常量
const int a=10;
//符号常量(所有出现pi的地方均被替换为3.14)
# define pi 3.14
%d 十进制
%o 八进制
%x 十六进制
%u 无符号十进制
%f 实数(小数形式)
%e 实数(指数形式)
%c 单个字符
%s 字符串
十进制就是逢十进一,二进制就是逢二进一;N进制是逢N进一;
在数字后面加B表示二进制;
O表示八进制;D表示十进制数,H表示十六进制数
如:
1011B=(1011)2
1357O=(1357)8
2049D=(2049)10
3FB9H=(3FB9)16
%d表示以十进制输入或输出
%o以八进制输入输出
%x表示以十六进制输入输出
常量在C语言中的表示:
十进制:传统写法
十六进制:前面加0x或0X
八进制:前面加0(注意是数字零)
浮点数:Double x= 123.45e-2;//x的值是1.2345
Float x =3.2;
Float x =123.45e-2f;
字符:按个字符用单引号括起来
字符串用双引号括起来
‘A’表示字符A
“AB”表示字符串AB
“A”表示’A’和’\0’的组合
字节:
内存条上一个格子是一位,8位组成一个字节,字节就是存储数据的单位,并且是硬件所能访问的最小单位;
一个字节包含8位,但硬件不能控制到位,但能够控制到字节;要想控制字节,要通过位运算符来实现。
int - 4个字节
long - 8
char - 1
1 byte= 8 b
1 K = 1024 byte
1M =1024K
1G = 1024M
1T = 1024G
ASCII
%c可以把字符变量输出
ASCII码不是一个值,而是一种规定,规定了不同的字符用哪个整数值表示的问题。字符的存储本质上与整数的存储方式是相同的。
‘A’——65
‘B’——66
‘a’——97
‘b’——98
‘0’——48
……
printf()的四种用法:
1、printf(“字符串\n”);\\如printf(“哈哈!\n”);
2、printf(“输出控制符”,输出参数);\\r如printf(“%o\n”,i);
3、printf(“%d %d\n”,j,k);
4、printf(“输出控制符 非输出控制符”,输出参数);
输出控制符
%d,——int
%ld,——long int
%f,——float
%lf,——double
%x(或者%X或者%#X),——int,long int 或 short int
%o,——int,long int 或 short int
%c,——char
%s——字符串输出
printf(“%x\n”,x);//输出结果是2f,假设x是47
printf(“%X\n”,x);//输出结果是2F
printf(“%#x\n”,x);//输出结果是0x2f
printf(“%#X\n”,x);//输出结果是0X2F//推荐使用
scanf()的两种用法:
用法一:
scanf(“%d %d”, &i, &j );//最好用空格而不用逗号,用逗号的话,输入时必须键入逗号;
用法二:
scanf(“i=%d”,&i);//键盘输入时必须键入“i=”和要输入的数字,一般不用这种用法。用scanf时最好不要输入非控制符!
如何用scanf写出高质量的程序?
1、写scanf之前,前面最好加一个printf提示信息!
2、最好不用,或者\n等,使用空格即可
3、必要时,最好将前面的赋值释放
4、编写代码时,应该对用户的非法输入做适当的处理
char ch;
while((ch = getchar()) !=’\n’)
continue;
算数运算符:+ - * / %(取余)
关系运算符:> >=< <= !=(不等于) ==(等于 )
逻辑运算符:||&& !
赋值运算符:= += -= /=*=
有限级别:
算数 > 关系 > 逻辑 > 赋值
前自增 --i ++i
后自增 i-- i++
三目运算符: A ? B : C
除法的运算结果和运算对象的数据类型有关,两个数都是int,则商就是int,若有小数,则截取小数部分;被除数和除数中只要有一个或两个都是浮点型数据,则商也是浮点型数据,不截取小数部分。
16/5==3 16/5.0==3.20000 -13/4==-4
取余的运算对象必须是整数,结果是整出后的余数,其余数的符号与被除数相同
13 % 3 == 1 13 % -3 == 1 -13 % 3 == -1
&&左边的表达式为假,右边的表达式肯定不会执行!
||左边的表达式为真,右边的表达式肯定不执行!
参考书籍: 《C语言程序设计》清华 谭浩强 《The C programminglangguage》机械工业 《C Primer Plus》人民邮电 《C和指针》人民邮电 《C专家编程》绝版 《C陷阱语缺陷》人民邮电 《C科学与艺术》机械工业 《汇编语言–王爽》