一, C 简介
1.1 什么是 C 语言?
C 语言是一门通用计算机编程语言, C 语言的设计目标是提供一种能以简易的方式编译, 处理低级存储器, 产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言.
尽管 C 语言提供了许多低级处理的功能, 但仍然保持着良好跨平台的特性, 以一个标准规格写出的 C 语言程序可在许多电脑平台上进行编译, 甚至包含一些嵌入式处理器 (单片机或称 MCU) 以及超级电脑等作业平台.
关于 C
C 语言是为了编写 UNIX 操作系统而被发明的.
C 语言是以 B 语言为基础的, B 语言大概是在 1970 年被引进的.
C 语言标准是于 1988 年由美国国家标准协会 (ANSI, 全称 American National Standard Institute) 制定的.
截至 1973 年, UNIX 操作系统完全使用 C 语言编写.
目前, C 语言是最广泛使用的系统程序设计语言.
大多数先进的软件都是使用 C 语言实现的.
当今最流行的 Linux 操作系统和 RBDMS MySQL 都是使用 C 语言编写的.
1.2 C 语言能做什么?
操作系统开发
软件开发
嵌入式开发
语言编译器
1.3 C 语言有什么优点?
可移植性: C 语言是高度可移植的, 你在不改动或者只做很小改动的情况下, 就可以把 C 语言的程序运行在不同平台;
C 语言很小: C 语言完全基于变量, 宏命令, 函数和架构, 整体非常小, 因此 C 语言可以嵌入几乎现代所有微型处理器中, 从冰箱到闹钟;
学会 C 学会一切: 几乎所有编程语言都由 C 语言实现, 或者有着和 C 语言一样相似的语法和逻辑规则, 因此, 学会 C 语言能使你很快学会其他语言.
1.4 C 语言有什么缺点?
运行时间: C 语言没有运行时间检查机制;
面向过程: C 语言不支持面向对象编程, 这就是为什么创造 C++;
不安全: 指针是 C 语言的一大特色, 可以说是 C 语言优于其它高级语言的一个重要原因, 但也就是因为它有指针, 可以直接进行靠近硬件的操作, 所以带来很多不安全的因素.
记住: 语言终究只是工具, 算法才是核心, 思路才是灵魂.
二, C 基本语法
2.1 C 程序主要构成
预处理器指令
函数
变量
语句 & 表达式
注释
2.2 C 程序编写流程
编辑
预编译
编译
汇编
链接
运行
2.3 C 语言结束符
C 程序语句的结束是通过分号';'实现的, 它表明一个逻辑实体的结束.
- auto
- register
- static
- extern
- # 方式 1
- void myFunction(int *param)
- {
- ...
- }
- # 方式 2
- void myFunction(int param[10])
- {
- ...
- }
- # 方式 3
- void myFunction(int param[])
- {
- ...
- }
- # 返回 type 类型的数组指针
- type * myFunction()
- {
- ...
- }
- # array 是一个指向 array[0]的指针, 值为 & array[0]
- type array[N];
- # p 是一个指向 type 数据类型的指针
- type *p;
- # 给 p 赋值, 让 p 指向 array 数组的第一个元素
- p = array;
- # 使用指针 p 来访问数组:
- *p;
- *p++;
- *(p+3);
- int var;
- int *ptr1 = &var;
- int **ptr2 = &ptr1;
- struct [struct tag]
- {
- member definition;
- member definition;
- ...
- member definition;
- }[one or more structure variable];
- union [union tag]
- {
- member definition;
- member definition;
- ...
- member definition;
- }[one or more union variable];
- struct bs{
- unsigned a:4;
- unsigned :4;
- unsigned b:4;
- unsigned c:4;
- }
- int i = 17;
- char c = 'c';
- float sum = i + c;
- if(boolean_expression)
- {
- /* 如果布尔表达式为真将执行的语句 */
- }
- if(boolean_expression)
- {
- /* 如果布尔表达式为真将执行的语句 */
- }
- else
- {
- /* 如果布尔表达式为假将执行的语句 */
- }
- if(boolean_expression 1)
- {
- /* 当布尔表达式 1 为真时执行 */
- }
- else if(boolean_expression 2)
- {
- /* 当布尔表达式 2 为真时执行 */
- }
- else if(boolean_expression 3)
- {
- /* 当布尔表达式 3 为真时执行 */
- }
- else
- {
- /* 当上面条件都不为真时执行 */
- }
- if(boolean_expression 1)
- {
- /* 当布尔表达式 1 为真时执行 */
- if(boolean_expression 2)
- {
- /* 当布尔表达式 2 为真时执行 */
- }
- else
- {
- /* 当布尔表达式 2 为假时执行 */
- }
- }
- else
- {
- /* 当布尔表达式 1 为假时执行 */
- }
- switch(expression){
- case constant-expression :
- statement(s);
- break; /* 可选的 */
- case constant-expression :
- statement(s);
- break; /* 可选的 */
- /* 你可以有任意数量的 case 语句 */
- default : /* 可选的 */
- statement(s);
- break; /* 可选的 */
- }
- switch(ch1) {
- case 'A':
- printf("这个 A 是外部 switch 的一部分" );
- switch(ch2) {
- case 'A':
- printf("这个 A 是内部 switch 的一部分" );
- break;
- case 'B': /* 内部 B case 代码 */
- }
- break;
- case 'B': /* 外部 B case 代码 */
- }
- while(condition)
- {
- statement(s);
- }
- for (init; condition; increment)
- {
- statement(s);
- }
- do
- {
- statement(s);
- }while(condition);
- // for 循环嵌套
- for (init; condition; increment)
- {
- for(init; condition; increment)
- {
- statement(s);
- }
- statements(s);
- }
- // while 循环嵌套
- while(condition)
- {
- while(condition)
- {
- statement(s);
- }
- statement(s);
- }
- // do...while 循环嵌套
- do
- {
- statement(s);
- do
- {
- statement(s);
- }while(condition);
- }while(condition);
- return_type function_name(parameter_list)
- {
- body of the functioin
- }
- int factorial(unsigned int i)
- {
- if(i <= 1)
- return 1;
- return i*factorial(i - 1);
- }
- int fibonaci(int i)
- {
- if(i == 0)
- return 0;
- if(i == 1)
- return 1;
- return fibonaci(i - 1) + fibonaci(i - 2);
- }
- int fputc(int c, FILE *fp);
- int fputs(const char *s, FILE *fp);
- int fprintf(FILE *fp, const char *format, ...);
- int fgetc(FILE *fp);
- char *fgets(char *buf, int n, FILE *fp);
- int fscanf(FILE *fp, const char *format, ...);
- size_t fread(void *ptr, size_t size_of_elements, size_t number_of_elements, FILE *a_file);
- size_t fwrite(const void *ptr, size_t size_of_elements, size_t number_of_elements, FILE *a_file);
- #define message_for(a, b) \
- printf(#a "and" #b ": We love you!\n")
- #define tokenpaster(n) printf("token" #n "= %d\n", token##n)
- int token32 = 40;
- tokenpaster(32);
- #if !defined (MESSAGE)
- #define MESSAGE "You wish!"
- #endif
- #ifndef HEAD_FILE
- #define HAED_FILE
- the entire header file file
- #endif // HEAD_FILE
- #if SYSTEM_1
- #include "system_1.h"
- #elif SYSTEM_2
- #include "system_2.h"
- #elif SYSTEM_3
- ...
- #endif
- int func(int, ...)
- {
- ...
- }
- double average(int num, ...)
- {
- int i;
- va_list valist;
- double sum = 0.0;
- va_start(valist, num);
- for(i = 0; i < num; i++)
- sum += va_arg(valist, int);
- va_end(valist);
- return sum/num;
- }
来源: http://www.jianshu.com/p/c604515b6bb2