C语言概述及入门
目录
1. 什么是程序
- 程序:令计算机执行某种指令或者解决某种问题而编写的一系列有序指令的集合。
2. C语言的诞生
- 丹尼斯·里奇——C语言之父,UNIX之父。
- 原先的UNIX操作系统都是用汇编语言写的,1973年UNIX操作系统的核心使用C语言改写。
3. C语言的发展
- 1972年诞生
- 1973年贝尔实验室发布
- 1989年ANSI完成标准制定(ANSI C 或 C89)(美国国家标准局American Standards Institute)
- 1999年ISO(国际化标准组织)发布了C99,增加了不少内容。
4. C语言的特点
- 代码级别的跨平台:重新编译即可在不同的电脑上运行代码。
- 允许直接访问物理地址,对硬件进行操作:既具有高级语言的功能,又具有低级语言的功能。可以用来写系统软件,比如操作系统,数据库,杀毒软件,防火墙,驱动,服务器程序。
- C语言是一个有结构化程序设计、具有变量作用域(variable scope)以及递归功能的过程式语言。
- C语言传递参数可以是值传递(pass by value 值),也可以传递指针(a pointer passed by value 地址),
- C语言中,没有对象,不同的变量类型可以用结构体(struct)组合在一起。
- 预编译处理(preprocessor),生成目标代码质量高,程序执行效率高。
5. C程序运行机制
- 编辑:比如编写一个 hello.c 文件,这个是源代码。
- 编译:将hello.c程序翻译成 目标文件(hello.c)//在计算机底层执行。
- 链接:将目标文件hello.obj + 库文件 生成可执行文件(Hello World.exe)//在计算机底层执行
- 运行:执行 Hello World.exe文件,得到运行结果。
- 这些文件都保存在你建立的project项目中:Hello World 中,如
exe文件右键打开即可运行。 - 图解
6. 什么是编译
- 利用编译程序(cl.exe)把C源文件编译成.obj文件(Hello.obj目标文件)。
- 如果程序没有错误,没有任何提示,将会在Debug文件夹中生成一个Hello.obj文件,该文件称为目标文件。
7. 什么是链接
- 有了目标文件,通过链接程序(link.exe)将其和C库文件链接成exe文件(可执行文件)。
- 如果程序没有错误,没有任何提示,Debug目录下会出现一个Hello World.exe文件(项目名.exe),该文件称为可执行文件。
- 那为什么需要链接库文件呢?因为的C程序会使用C语言库里的内容,比如:<stdio.h>中的printf()、<stdlib.h>中的system(),这些都不是程序员自己写的,而是C程序库里提供的。
- 链接过后,exe文件会比obj文件大了一些。4kb—>27kb,加入了库文件。
7. 什么是运行
- 有了可执行的exe文件,也称为可执行程序(二进制文件)。
- 在控制台下可以直接运行exe文件。
- 更改源文件后,需要重新编译生成exe文件,更改才能生效。
8. C语言开发注意事项
9. 转义字符的使用
- \t : 一个制表位
- \n : 换行,newline,将当前位置移到下行开头
- \r : 回车,return,将光标移到本行开头
- \ : 输出一个\
- * : 输出一个*
- " : 输出一个"
- ' : 输出一个'
10. 规范代码风格
- 注释一个函数使用块注释。
- 注意一个语句使用行注释。
- 缩进:tab,默认整体向右移动,shift+tab向左移动。
- 运算符左右习惯加一个空格。
- 代码格式化快捷键ctrl+左windows键
11. C语言标准库的使用
- c标准库是一组C内置函数、常量和头文件,比如<stdio.h>,<stdlib.h>,<math.h>,这个标准库可以成为程序员的参考手册。
- pow函数可能会出现多个重载函数,对参数检查更为严格,正确的方法为:pow(double ,int); 或 pow(double,double);
13. C语言-强类型语言
- 强类型定义语言:总是强制类型定义的语言,要求变量的使用要严格符合定义,所有变量都必须先定义后使用。如java、.NET、C/C++等。也就是说一旦一个变量被指定了某个数据类型,如果不经过强制转换,那么它就永远是这个数据类型了。
- 弱类型语言:数据类型可以被忽略的语言。它与强类型定义语言相反, 一个变量可以赋不同数据类型的值。
12. 变量
- 一个程序就是一个世界,变量就是这个世界的基本组成单位。变量的三要素(变量名+数据类型+值)。
- 变量相当于内存中一个数据存储空间的一种表示,你可以把变量看做成一个房间的门牌号,通过门牌号可以找到房间,通过变量名可以访问到变量值。
- 变量输出
输出格式 输出类型 %d 有符号10进制整数(整型数) %ld 有符号10进制整数(长整型数) %i 有符号10进制整数(可以将八进制、十六进制转换十进制形式) %o 无符号8进制整数 %u 无符号10进制整数 %x 无符号的16进制数字,并以小写abcdef表示 %X 无符号的16进制数字,并以大写ABCDEF表示 %F/f 浮点数 %E/e 用科学计数法表示的数 %g 使用%f和%e表示中的总的位数表示最短的来表示浮点数 G 同g格式,但表示为指数 %c 单个字符 %s 字符串 - 输出的格式化形式要与变量类型严格匹配,看到代码要与其在计算机内存的分配关联。
- 一个char占1个字节(1个Byte)由8bits(位)组成。
- char没有负值,占两个字节,所以最小值为0,最大值为1111 1111 1111 1111,故取值范围是0~2^16-1(65535)
- 一个汉字占2个Byte,连续输出两个字符可以输出一个汉字。例如:
char a[] = "金" ;
printf("%c%c",a[0],a[1]);
- byte的取值范围为1000 0000 到 0111 1111(-128~127)
正数的补码和原码相同,负数的补码是在原码的基础上各位取反然后加1
1000 000是补码,减一然后按位取反得到其原码
(减一得 0111 1111,再按位取反得 1000 0000) - 变量的数据类型
①整型的类型
②空类型
一种特殊的返回类型,表示空函数,也就是没有返回值的函数。