C语言

C 简介

高级编程语言 1972

C环境

文本编辑器 与C编译器

编辑器创建的文件为源文件 包含源代码

C 源文件扩展名.c

C编译器

将C源代码转换成机器语言.这样CPU 可以按照规定的的指令执行程序

C语言编辑器用于把源程序编译成最终的可以行程序,

GNU GCC编译器

程序结构

程序实例

预处理指令 函数 变量 语句 注释

1
2
3
4
5
#include <stdio.h>
int main(){
printf("test");
return 0;
}

编译&执行C程序

通过文本编辑器 将 代码保存 扩展为.c

使用 shell 键入 gcc test.c -o test

就会在同级目录下得到一个二进制文件

然后使用 gcc test 就能直接 得到C程序执行后的结果

C基础语法

关键字:语言预留的具有特殊意义的单词 如 int if mian

标识符: 程序员自定义的名称,用于变量,函数,数组等.

常量:程序中固定不变的值

字符串字面量:由双括号括起来的字符序列如”hello”

运算符:用于执行运算的符号 如 + = &&.

分隔符:用于风格语句和代码块的符号

C程序实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h> //头文件包含
#define PI 3.14159 //宏定义
// 函数声明
int add(int a, int b);
int main(){
//变量声明
int num1,num2,sum;
//用户输入
printf("输入俩个数");
scanf("%d %d",&num1,&num2);
// 函数调用
sum = add (num1,num2);
//输出结果
printf("SUM: %d\n",sum);
return 0;
}
//函数定义
int add(int a, int b){
return a + b;
}

头文件包含

头文件通常在程序的开头使用#inclaude指令 包含了 函数和库的声明,如标准输入库<stdio.h> 等 它们定义了函数,宏常量等使程序能够使用预定义的库函数.

系统头文件使用尖括号<> 自定义头文件使用双引号 两者的搜索路径不同

宏定义

宏是通过的#inclaude 指令定义的符号常量或代码片段.宏在编译前又预处理器进行文本替换,不占用运行时内存,常用于定义常量或简单的内联代码逻辑.

宏没有欸行检查,使用时需谨慎;对于有类型要求常量,推荐使用const变量替代

函数声明

在C语言中,函数的声明(又称圆形) 必须在函数定义或调用之前出现,声明提供了函数的返回类型,函数名和参数列表,以便 编译器在调用点进行类型检查

函数声明可以放在头文件中,供多个文件共享使用

主函数

main()函数时C程序的入口点,每个C程序都必须包括一个main函数,程序从main() 开始之宗,返回值通常为0表示程序成功执行 ,非零值表示出现了错误.

main()函数也可以接受命令行参数

变量声明

在C程序宏所有变量必须咋爱使用前声明其类型,变量可以在main()函数中声明(局部变量),也可以在函数外部全局声明(全局变量).

声明变量时可同时进行初始化,未初始化的局部变量

语句和表达式

语句是 C程序的基本执行单元,通常是函数调用,赋值,控制语句。(如if.for)或表达式。表示式是由变量,操作符和常量组成的代码片段,能够计算出一个值。

控制流语句

控制流语句用于控制程序执行的顺序,包括条件判断和循环还有跳转语句break,continue,goto 和 return
合理使用控制流语句是写出逻辑清晰程序的关键,应该避免滥用goto 以保持代码可读性。

函数定义

函数定义b包含完整的函数体,描述了函数的具体实现。一个函数由返回类型,函数名,参数列表和函数体组成。良好的函数设计应遵循单一职责的原则,每个函数只做一件事
C的函数不支持热重载,每一个函数名在同一作用域必须唯一。函数可以递归调用自身。

返回语句

return 语句y用于终止函数的执行,并将控制权连同返回值一起交还给调用者。void类型函数可以使用不带值的return,ti 提前退出,也可以省略return语句
main()函数的返回值会传递给系统,0通常表示成功,可以使用标准宏EXIT_SUCCESS 和 EXIT_FAILURE 定义在<stdio.h>

分隔符

分割语句,表达式和代码块,帮助编译器理解程序结构,常见的分割符包括
逗号 分割变量声明,函数参数或初始化列表中的多个元素
分号 用于结束一条语句,是C语言中最常见的分割符
括号
圆括号 用于函数调用的参数列表,控制流语句的条件,以及表达式求值顺序。
花括号 用于定语函数题,控制流代码块,以及符合字面量与数组/结构体的初始化。
方括号 用于数组的声明和元素访问

在C 中,分号是是语句结束符;
每个语句必须要分号结束;
他表明一个逻辑实体的结束,缺少分号是初学者最常见的语法错误之一。
一个单独的分号也可以作为一个空语句,表示什么都不做,常用于某些循环结构中;

标识符是程序中 变量,函数,数组,类型等的名字,由程序员自定义。标识符由字母,数字下划线组成,第一个字符必须是字母下划线,不能是数字。
一个标识符以字母A-Z 或 a-z 或 下划线 开始,后跟零个或多个字母,下划线和数字(0-9)
C标识符内不允许出现标点字符比如@ $ 和 %
C是区分大小写的编程语言。因此在C中 Manpower 和 manpower是两个不同的标识符

常量

常量是固定值,在程序执行期间不会改变,C语言定义常量主要有两种方式;
使用const 关键字 或使用 #define宏定义
常量可以是整形chang常量,浮点型常量,字符常量,枚举常量

1
2
3
const int MAX = 100; //整形常量
const PI = 3.14159; //浮点型常量
const char NEWLINE = '\n'; //字符常量(转译字符)

使用const定义的常量带有类型信息,编译器尅进行类型检查,相比#define 宏更安全,是C99 及之后的推荐方式。

字符串 字面量

字符串字面量是由双引号括起来的字符序列,用于表示文本数据。
字符串字面量 在内存中以字符数组的形式存储。末尾会自动添加一个空字符\0 即null终止符,标志字符串的结束。

1
2
char greeting[] = "hello,world";
//编译器自动计算长度 包含\0

补充
“hello” 在内存中实际占了 6个字节 h,e,l,l,o,\0
字符串字面量存储在只读内存区域,不可修改; 若需修改,应将其复制到字符数组中。
两个相邻的字符串字面量会被编译器自动拼接
字符A 和 字符串 A (字符串字面量)是不同的,后者包含A和\0俩个字符。

C 数据类型

在C中数据类型指的是用于声明不不同类型的变量或函数的一个广泛的系统。变量的类型决定了变量存储空间的占用,以及如何存储的位模式。

基本数据类型
它们是算术类型 包括整形(int),字符型(char),浮点型(float)和双精度型(double)

枚举类型
它们也算是算术类型,被用来定义在程序中只能赋予其一定的离散数值的变量.

void 类型
类型说明 void表示没有值的数据类型,通常用于函数返回值.

派生类型
包括数组类型,指数类型和结构体类型

数组类型和结构类型统称为聚合类型.函数的类型指的是函数返回值的类型.

整数类型
char 1 -128-127/0-255
unsigned cahr 1 0-255
signed char 1 -128-127
int 2或4 -32768-32767字符串字面量