第一个C语言程序
从第一个C语言程序了解C语言
上图是一个在控制台上显示“Hello, World!”的C语言源代码。
其中 #include <Stdio.h>是预处理文件。通常程序在编译之前需要处理一些内容,这些内容称为“预编译处理命令”,它们通常以#号开头,并不用分号结尾,所以不是C语言的程序语句。
在这里的预编译处理命令(#include <Stdio.h>)称为文件包含命令,其作用是编译之前把程序需要用到的系统自定义函数printf()的一些信息文件Stdio.h文件包含进来。以".h"结尾的文件称为头文件。
了解关键字
所谓关键字就是已经被C语言本身使用,不能用作其他用途的字(词)。所以,在用户定义变量、函数等时,不可以使用和关键字同名的标识符。
C语言中一共有32个关键字,它们分别是:
数据类型关键字
A. 基本数据类型(5个)
void 声明函数无返回值或无参数,申明无类型指针,显式丢弃运算结果
char 字符类型数据,属于整形数据的一种
int 整形数据,通常为编译器指定的机器字长
float 单精度浮点数据类型,属于浮点数据的一种
double 双精度浮点数据类型,属于浮点数据的一种
B. 类型修饰关键字(4个)
short 修饰int,短型整型数据,可省略被修饰的int
long 修饰int,长整型数据,可省略被修饰的int
signed 修饰整型数据,有符号数据类型
unsigned 修饰整型数据,无符号数据类型
C. 复杂类型关键字(5个)
struct 结构体声明
union 共同体声明
enum 枚举声明
typedef 声明类型别名
sizeof 得到指定类型活特定类型变量的大小
D. 存储级别关键字(6个)
auto 指定为自动变量,由编译器自动分配及释放。通常在栈上分配
static 指定为静态变量,分配在静态变量区,修饰函数时,指定函数作用域为文件内部
register 指定为寄存器变量,建议编译器将变量存储到寄存器中使用,也可以修饰函数形参,建议编译器通过寄存器而不是堆栈传递形参
extern 指定对应变量为外部变量,即标识变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义
const 与volatile合成“CV”特性,指定变量不可被当作当前线程/进程改变(但有可能被系统或者其他线程/进程改变)
volatile 与volatile合成“CV”特性,指定变量的值有可能会被系统或者其他进程/线程改变,强制编译器每次从内存中取得该变量的值
流程控制关键字
A. 跳转结构(4个)
return 用在函数体上,返回特定值(或者是void值,既不返回值)
continue 结束当前循环,开始下一轮循环
break 跳出当前循环或者switch结构
goto 无条件跳转语句(不建议使用)
B. 分支结构(5)
if 条件语句,后面不需要放分好
else 条件语句否定分支(与if连用)
switch 开关语句(多重分支语句)
case 开关语句中的分支标记
default 开关语句中的“其他”分支,可选
C. 循环结构(3)
for for循环结构
do do循环结构
while while循环结构
了解函数
C语言是由函数构成的。一个程序可以由多个函数组成,但必须有一个主函数(main函数)、且只有一个主函数。
int main说明该主函数返回值类型为int,所以在函数体总最后一行可以看到return 0;
main(int argc, const char * argv[]),括号中的内容代表函数的参数。
函数由:返回值类型 函数名(形参){函数体}组成。
主函数是由系统调用的,其他函数在调用前必须对其申明。由于C语言编译是自上而下的顺序,所以,如果自定义函数在主函数之前,在主函数中调用该函数时,不需要对该函数声明。而,自定义函数在主函数之后,在主函数中调用该函数时需要对该函数进行申明。
注释
程序里如果没有注释,当把程序移交给其他程序员维护或者检查很久以前写的程序时,往往会抓狂。有效的注释体现程序的读取性和设计思想。
注释方法:
单行注释:以“//”开始至改行结束之间的内容都是注释
多行注释:以“/*”开始,到“*/”结束,这之间的内容都是注释,包括换行
单行注释可以嵌套多行注释和单行注释,但这样没有实际意义
多行注释可以嵌套单行注释,但多行注释不可以嵌套多行注释,当多行注释嵌套时如下图,多行注释遇到第一个“*/”后就结束了,所以第二个“*/”不是注释结尾符。
良好的注释容易让其他程序员或者隔了很久也能轻松的看懂程序设计思想和程序和功能。多人维护同一程序时,加上修改注释也是很好的维护方式。
/* 2014年1月1日 第一次修正 作者:张三 备注:修复***bug 2014年6月2日 第二次修正 作者:李四 备注:更改***参数 2015年2月3日 第三次修正 作者:王五 备注:根据客户需求新增*** */
C语言的执行流程
1. 程序员变成以'.c'格式结尾的C语言源程序
2. 编译器编译为以'.o'格式结尾的目标文件
3. 把目标文件和库函数整合成一个以'.out'格式结尾的可执行文件
标识符
在C语言中,符号常量、变量、数组、函数等都需要一定的名称,我们把这种名称叫做标识符。
标识符划分为:关键字,预定义标识符和用户标识符。
用户自定义的标识符的命名规则:
1. 由字母、数字、下划线及美元符号$组成
2. 不能以数字开头
3. 不能和关键字重名
4. 严格区分大小写
标识符的命名规范;
1. 有意义的名字(可以增加代码可读性)
2. 遵循驼峰命名规范(当标识符由多个单词组成时3种方式:1. 第一个单词首字母小写,其他单词首字母大写;2. 每个单词首字母都大写;3. 每个单词之间以下划线连接)
C语言的学习重难点
#1 运算符:自增、自建运算符
#2 进制:各种进制转换、原码、反码、补码
#3 数组:一维数组、二维数组、多维数组
#4 循环:多重循环的嵌套、排序、查找
#5 函数:递归函数、递归调用
#6 指针:一级指针、多级指针、指针和数组、函数、结构体之间的关系
#7 内存管理:C语言的内存管理问题、内存泄漏、野指针
#8 有参宏及条件编译
#9 多文件并发、多文件编译、多文件开发