1.c语言的发展历史
--C语言的原型ALGOL 60语言(也称为A语言),最早的块结构语言。
--1963年,剑桥大学将ALGOL 60语言发展成为CPL语言,CPL最大的缺点就是太大了,以至于不能在很多应用程序中使用。
--1967年,剑桥大学的Martin Richards 对CPL语言进行了简化,于是产生了BCPL语言,BCPL缺乏运行时的支持,而且运行很慢。
--1970年,美国贝尔实验室的Ken thompson将BCPL进行了修改,提炼CPL语言的精华并起名为B语言,并且他用B语言写了第一个UNIX操作系统,它的字符处理机制太烂了,而且浮点数运算被实现的并不理想,处理指针时开销太大。
--1972年左右,美国贝尔实验室的D.M.Ritchie在B语言基础上最终设计出了一种新的语言,取名为C语言。
--1977年,为了使UNIX操作系统推广,Dennis.M.Rithie发表了不依赖于具体机器系统的C语言编译文本“可移植的C语言编译程序”。
--1978年,美国电放电报公司(AT&T)贝尔实验室正式发表了C语言,同时由B.W.Kernighan和D.M.Ritche合著了著名的“The C Programming Language”一书,通常简称为“K&R”,也有人称之为“K&R”标准,但是在“K&R”中并没有定义一个完整的标准C语言。
--1983年,美国国家标准化协会(American National Standards Institute),在“K&R”基础上制定了一个C语言标准,于1983年发表,通常称之为ANSI C,又称C89。
--1990年,国际标准化组织ISO(International Organization for Standards)接受了ANSI C为ISO C的标准(ISO9899-1990),又称C99。
2.C语言的特点
1》 语言,简洁,紧凑,使用方便灵活。C语言一共有32个关键字,9种控制语句,程序书写自由,压缩了一切不必要的成份。
2》 运算符丰富。
3》 数据类型丰富,具有现代语言的各种数据结构。
4》 具有结构化的控制语句。
5》 语法限制不太严格,程序设计自由度大。
6》 C语言允许直接访问物理地址,能进行位(bit)操作,能实现汇编语言的大部分功能,可以直接对硬件操作。
7》 生成目标代码质量高,程序执行效率高。C语言一般只比汇编程序生成的目标代码效率低10%--%20。
8》 C语言编写的程序可移植性好,基本不用太多的修改就能在各种平台上运行。
3.C的应用现状
操作系统内核开发领域几乎是唯一开发工具
绝大部分操作系统是由C加上少量汇编语言开发的
Linux、Windows、Vxworks、Unix
在嵌入式领域占有绝对优势
在网络服务器类相当大优势
Apache、Oracle
GUI应用领域
大型商用程序采用C的较多
Offices,SPSS,AutoCAD
大规模、高性能计算、游戏开发以及一些传统的客户端软件和构件
4.C程序结构特点
程序由一个或多个函数组成
必须有并且只能有一个主函数main()
程序执行从main开始,在main中结束,其它函数通过嵌套调用得以执行
C程序由语句组成
用";"作为语句终止符
习惯用小写字母,大小写敏感
6.linux平台下我们用的编译工具 gcc (GUN)编译器的集合;我们用的编辑工具 VIM 。
注: 区别的编译器和编辑器的功用。
-E -S -c (-o)
.c --> .i --> .s --> .o --> a.out
预处理 编译 汇编 链接
7.常用的字节和位之间的单位系
内存以字节为单元组成,每个字节有一个地址,一个字节一般由8个二进制位组成,每个二进制的值是0或1
1T = 1024G
1G = 1024M
1M = 1024K
1K = 1024B
1B = 8b Byte 字节 Bit 位
8.C语言的32个关键字
只有32个,很多功能由函数实现.
auto break case char const continue default do double else
enum extern float for goto if int long register return
short signed sizeof static struct switch typedef unsigned union void
volatile while
9.数据类型 注:(区分数据类型和数据结构的概念)
|--短整型short
|整型----|--整型 int
|--数值类型| |--长整型long
| |--扩展型长整型 long long
|---------------基本类型--| |
| | |实点型--|-单精度型float
| | |-双精度型double
C | |--字符类型
数 |
据 --| |--数组
类 |---------------构造类型--|--结构体型
型 | |--枚举类型
| |--共用体型
|
|---------------指针类型
|
|---------------空类型(无类型void)
|
|---------------自定义类型typedef
10. 常量与变量
1》运行过程中,其值不能改变的量称为常量。12,-3,4.6,-1.23,'a',“hello”。
2》在运行过程中可以改变其值的量叫变量。
3》和其它高级语言一样,用来对变量,符号常量,函数,数组等数据对象命名的有效字符序列称为标志符。
注: 规定标识符只能由字母,数字和下划线3种字符组成。且第一个字母必须为字母或下划线。(有大小写之分)
Class class 为不同的变量名。
注:ANSI C没有规定标识符的长度,但各个C编译系统都有自己的规定。如IBM——PC的MSC取8个字符。大于8个字符的只取前8个字符作为有效标识符。
11.整型变量
1》 整型数据在内存的存储方式(补码),正数和0的补码和它的原码相同,负数是原码取反加1;
2》 整数的十进制数,八进制,二进制的相互转换和表示方法;
10进制===>>2进制 (除二取余法)
2 ===>>10 例10101 == 1*2^0+0*2^1+1*2^2+0*2^3+1*2^4
每一个十六进制对应4个bit
12.浮点型变量
float f;
double b;
13.字符变量与常量
man ascii
char ch "ch为字符变量"
ch = 'a' "a为字符常量"
14.字符串常量
"hello world"
13.算术运算符和算术表达式
(查表理解它们之间的优先级别,尽可能的多记一点)
a+b; a b 操作数 ‘+’操作符
根据所需操作数的数量 将操作符分为:
1.单目运算符:++ -- & ! ~ *(解引用:访问指针指向的空间)
2.双目运算符:+ - * / %
3.三目运算符: ?:
14.输出(printf)输入(scanf)语句的用法和简介
printf("hello %d\n",a);
scanf("%d",&a);
% 格式控制符
a 输出/输入参数
几个%对应几个输出/输入参数,也叫输出列表
%d 整数int
%h short
%c 字符char
%s 字符串
%f 浮点型float
%lf double
%p 地址
%x 十六进制
%o 一个八进制
%u unsigned int
%hu unsigned short
%ld unsigned long
%lld long long
%% 输出一个“%”
...........................
15.位运算
运算符 含义
&(清0) 按位与 0&0=0, 0&1=0, 1&0=0, 1&1=1
|(置1) 按位或 0|0=0, 1|0=1, 0|1=1, 1|1=1
^ 按位异或 0^0=0, 1^0=1, 0^1=1, 1^1=0
~ 取反
在逻辑左右移移出去的直接丢弃,空出来的补0
算术右移移出去的直接丢弃 空出来的补符号位
<< 左移
>> 右移
16.布尔希值(bool)
非零为真,零为假。