C语言一般是进入大学学的第一门计算机语言, 这里做一个简单回顾。
第一部分: C语言简介
C语言和C++不同,C语言是面向过程的语言,也就是说,他的基本组成结构是函数,关于更多面向过程和面向对象的介绍可以看我的《C++程序设计》。
推荐工具:C语言在线运行工具
推荐文档:c语言&&c++
推荐文章:http://www.open-open.com/doc/view/f411756be0444ff6a95a992ffb60e448 C/C++经典面试题
对于c,我们可以将之保存为c文件,然后按照下面的方式执行即可:
第二部分:C语言程序实例
#include <stdio.h> int main() { /* 我的第一个 C 程序 */ printf("Hello, World! "); return 0; }
这段代码就可以输出“Hello, world!” 了。
- 可以看到,和C++一样,它也需要引入一个文件,如C++中#include <iostream> ,而这里也是引入了一个io类似的文件。用来在编译的时候告诉编译器实际编译时要包含 stdio.h 文件。
- 并且也有一个 int main()函数,和C++十分类似,且最后返回 0,即 return 0,return 0 即表示退出程序。
- /* ... */ 用于注释说明,在实际编译时会被编译器忽略。
- printf() 用于格式化输出到屏幕。printf() 函数在 "stdio.h" 头文件中声明。 正如C++中使用cout需要引入 <iostream>是一样的。
- stdio.h(standard i/o head) 是一个头文件 (标准输入输出头文件) and #include 是一个预处理命令,用来引入头文件。 当编译器遇到 printf() 函数时,如果没有找到 stdio.h 头文件,会发生编译错误。
- 可以看到C语言这里并没有命名空间,而C++中是有的,一般具有命名空间的语言更适合编写更为复杂的函数。
别看C语言这么简单,他还是挺能做事情的,如当今最流行的 Linux 操作系统和 RDBMS(Relational Database Management System:关系数据库管理系统) MySQL 都是使用 C 语言编写的。
不仅如此,操作系统、语言编译器、汇编器、文本编辑器、打印机、网络驱动器、现代程序、数据库、语言解释器、实体工具等都是使用C语言编写的,所以作为程序员是没有理由不学习C语言的!
第三部分:C基本语法
C语言中的五个令牌是:分号、注释、标识符、关键字和空格。
- 分号: 和js及C++相同,C语言中的分号也代表一距代码的结束。
- 注释: 即/*这是注释*/ , 和js及C++相同,我们都可以使用类似的注释方式。
- 标识符:C 标识符是用来标识变量、函数,或任何其他用户自定义项目的名称。一个标识符以字母 A-Z 或 a-z 或下划线 _ 开始,后跟零个或多个字母、下划线和数字(0-9)。关键: 在C语言中,标识符是指用户自定义的。 而js却不是。另外,C语言中的标识符和C++中类似,都是允许字母或下划线开头,后接字母、数字、下划线,同样不支持$。 在js中,是支持$的。
- 关键字: 在C语言中,关键字是指C语言自身定义的,如 break 、if、else等等。
- 空格:
第四部分: 数据类型
在C语言中的数据类型指的是用来描述不同类型的变量或函数。
整数类型:
- char 字符
- unsigned char 无符号字符
- signed char 有符号字符
- int 整型
- unsigned int 无符号整型
- short 短整型
- unsigned short 无符号短整型
- long 长整型
- unsigned long 无符号长整形
我们可以看到在c中我们可以使用unsigned和signed对int、short和long进行描述。
为了得到他们所占的字节数,和C++一样,我们可以使用sizeof()方法来查看:
#include <stdio.h> int main() { printf("内存:%lu", sizeof(int)); }
最后会输出: 内存:4 (可以看到,在printf的第一个参数中我们传递了一个%lu,这是为了说明sizeof(int)的类型,后面会重点来讲,这个和js中console.log是类似的,可以进入www.eeyes.net然后按下F12查看, 那里我是用的是%c),,如下:
浮点类型:
- float 浮点类型
- double 双精度浮点类型
- long double 长双精度浮点类型
void类型
void类型表示没有可用的值,通常用在下面的三种情况:
第五部分: 变量
这一部分是我们用的比较多的,和C++相比,基本的变量类型中,比C++少了两个,一个是bool(布尔型),另一个是wchar_t。
变量定义和C++也是一样的,如下所示,下面的都是合法的:
int a; char b; float c, d;
即每一个定义是一个语句,我们还可以同时定义多个变量,使用 逗号 分割即可。
另外,我们也可以在定义变量的时候同时初始化,如下所示:
int a = 8; char b = 'c'; float c = 5, d = 10;
关于变量的声明有一个地方需要注意,这个C++是相同的,即
- 需要建立空间的变量声明 如int a; 在声明a是一个整型的时候就建立了存储空间。
- 不需要建立空间的变量声明 , 即使用extern关键字声明变量名,而不定义它,如 extern int a; 这个语句表示声明变量a,但是不定义它。
注意: 在c语言中严格区分了 声明 和 定义 。 声明表示我有这个变量,不一定是刚刚存在的, 而定义表示我是刚刚出生的,刚刚存在的,需要占据存储空间的。
extern int i; //声明,不是定义
int i; //声明,也是定义
字符常量
字符常量可以是一个普通的字符(例如 'x')、一个转义序列(例如 ' '),或一个通用的字符(例如 'u02C0')。
在 C 中,有一些特定的字符,当它们前面有反斜杠(一定要是反斜杠)时,它们就具有特殊的含义,被用来表示如换行符( )或制表符( )等。下表列出了一些这样的转义序列码:
其中,b表示back - 回退, n表示newline-换行, r表示carriage return - 回车, t表示table- 制表, v表示verticle table -垂直制表。
如下所示:
#include <stdio.h> int main() { printf("zzw hett shgua shaga over"); return 0; }
最终的输出如下:
zzw
hett shgua shaga
over
定义常量
在C语言中定义常量和C++中定义常量完全一致,即#define 和 const两种方法:
#include <stdio.h> #define GOD 888 int main() { const int a = 10; printf("define %d const %d",GOD,a); }
可以看出,其中使用#define定义常量的时候不需要写变量类型,且最后不能有分号, 变量名必须是大写。另外,在printf中,我们必须使用%d对应着输出。
第六部分:C函数
多行代码完成一个功能,封装起来之后就是一个函数,C语言亦是如此,且至少要有一个主函数main()。
函数声明告诉编译器函数的名称、返回类型和参数。函数定义提供了函数的实际主体。 (注意:函数声明和函数定义是不同的,其中,函数声明是指:告诉编译器,在这个程序中有这个函数。 而函数定义是,直接定义了这个函数,即其内容是什么)
可以看出,和C++并没有什么不同,另外,注意: 如果这个函数就只是干某一件事儿,最后什么都不需要返回,那么这个函数的类型就是void。
C语言中传递参数有两种方式,和C++类似,一种就是传值调用,另一种就是引用调用。 前者在函数体内不会改变函数外的值,而后者在函数内被改变的时候,函数外的值也会跟着改变。
在C语言中,变量同样具有局部变量和全局变量,指的注意的是:C和C++没有像js一样的变量提升,即使用前必须先声明。
第七部分: C数组
c语言中的数组和C++中的数组是非常类似的,定义方式如下:
int a[100] = {20, 50, 30, 8};
第八部分: 指针
在C中的指针和C++中的指针几乎是一样的,值得注意的是,C语言中说了这么一句话:
在变量声明的时候,如果没有确切的地址可以赋值,为指针变量赋一个 NULL 值是一个良好的编程习惯。赋为 NULL 值的指针被称为空指针。如下所示:
int *ptr = NULL;
第九部分: 字符串
和C++一样,定义字符串的方式有以下两种:
char str[10] = {'d','a','f','e','