一、C语言的基本概念与常识
1、所有计算机的指令与数据都是由 0、1构成
2、C语言是由函数组成的
3、C语言的入口是main函数
4、源码 -> 编译 -> 链接 -》运行
关键字:C语言提供的表示特殊含义单词
标示符:程序员自己为某些东西起名字
命名规则:
1、字母、数字、下划线
2、不能以数字开头
3、不能与关键字重名
4、严格区分大小写
命名规范
驼峰标示
注释:对代码解释说明,是给程序员看的,方便程序员之间的交流
1、注释不参与编译
2、 单行注释 // 多行注释
数据类型:按照存储时间
静态数据:存储在硬盘上的数据
动态数据:存储在内存中的数据
常量:不可以改变量
变量:可以改变的量,变量使用来存储常量数据的
运算符
算术运算符 + - * / %
赋值运算符 = += -= /= *= %=
自增自减 --a a-- ++a a++
关系运算符 == != > < >= <=
逻辑运算符 && || !
三目运算符 条件表达式 ? 结果1 : 结果2;
二、数据类型
基本数据类型
int 、float 、double 、char
枚举:当某个东西只有几个固定的取值的时候,我们就使用枚举
定义格式 enum 枚举类型名{成员,... };
作用:提高代码可读性
构造类型
数组:保存相同数据类型的多个数据的集合(容器)
格式: 数据类型 数组名[元素格式]
结构体:用来保存不同数据类型的多个数据的,相同的数据类型但可以表示特定含义的也可以使用结构体
定义结构体类型的格式; struct 结构体类型名{ 数据类型 成员名; ... };
特点:先定义结构体类型再定义结构体变量
作用:提高代码的可读性、封装数据、然代码更有组织
指针类型
定义格式:所指向数据类型 * 指针变量名
*作用:
1、在变量定义的时候,它是一个说明符,说明定义这个变量是指针变量;
2、在非变量定义的时候,它是一个操作符,访问指针所指向存储空间
&作用:取出变量的地址
* 与 & 是一对反操作符
1、指针作为函数参数传递是地址传递
指向数组的指针:
int nums[5][10];
int (*array)[10] = nums;
指向结构体指针
struct Person{int age;};
struct Person person = {10};
struct Perosn *p = &person;
p->age;
指向函数指针
int sum(int num1,int num2) { return num1 + num2 ; }
int (*sumPointer)(int,int) = sum;
sumPointer();
字符串:
1、使用字符数组
char name[] = "zbz"; //栈 : 可以修改的
2、使用字符指针
char *name = "zbz"; //常量区 只读的
3、字符串数组
1、char类型的二维数组
char names[][10] = {"xhh","xff","xmf"};//栈
2、char类型指针数组
char *names[] ={"xhh","xff","xmf"};// 常量区
总结:所有的数据类型都可以定义变量
所有数据类型都可以作为函数参数
所有数据类型都可以作为函数的返回值
三、流程控制
顺序结构:按照从上到下顺序执行
分支结构(选择结构):就相当于岔路口,根据不同条件指向不同代码
if语句:当条件满足的时候,执行if后面大括号中语句
1、if都是以if开头
2、if语句最多只有一个else
3、if语句可以有任意个else if
4、if语句最多只有一个代码会被执行
switch语句
1、只支持整形数据
2、如果表达式中值与case中的常量相等就执行这个case中语句
3、只有遇到break和 } 才会结束
4、只要匹配上一个case那么后面的case都失效了
循环结构体:只要条件满足就指向循环体中的语句,直到条件不再满足为止
while循环:当while后条件表达满足就指向循环体
do while: 循环体中的代码至少会执行一次
for循环:
格式:for(初始化表达式;条件表达式;循环后操作表达式)
{
语句;
....
}
初始化表达式:在整个循环中仅执行一次
条件表达式:在每一次循环前都会判断条件表达式是否满足,如果满足就执行循环体中代码
否则就退出循环
操作后表达式:在没有循环结束的时候都可以循环后操作表达式
continue:
只能用循环结构中,跳过本次循环中,continue后语句,进入下一次条件判断
break:
用在switch中,他是用结束switch语句的
用在循环结构中,结束当前循环语句的
四、 函数:完成特定功能代码段
函数定义的格式:
形参列表
返回值类型 函数名称(形参类型 形参名称...)
{
语句;
...
}
写一个函数步骤:
1、确定函数功能,给函数起一个有意义名字
2、确定形参列表(完成该功能是否需要外界传入一些补助值)
3、确定返回值类型(完成该功能是否需要返回数据给调用者)
4、写函数体,完成函数功能
如果我们要在前面的函数中访问后面的函数,需要对函数进行声明
多文件开发
.h 中写函数的声明
.c 写函数的实现(定义)
注意点:
1、基本数据类型作为函数参数传递是指值传递
2、数组作为函数参数传递是地址传递
3、指针作为函数参数传递是地址传递
4、结构体作为函数参数传递是值传递