【【ccc云志】学c语言最重要的知识点总结,为学c语言发愁的同学转走背一下吧】https://toutiao.com/group/6582822070382494216/?iid=15906422033&app=explore_article×tamp=1532780891&tt_from=copy_link&utm_source=copy_link&utm_medium=toutiao_ios&utm_campaign=client_share
(指针星号在非变量定义的时候它是一个操作符访问指针所指向存储空间)
学c语言最重要的知识点总结,为学c语言发愁的同学转走背一下吧
一、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、结构体作为函数参数传递是值传递
五、进制
十进制:逢 10 进 1 默认 %d
二进制:逢 2 进 1 0b/0B开头 无
八进制:逢 8 进 1 0开头 %o
十六进制:逢 16 进 1 0x开头 %x %X
位运算: & | ^ ~ >> <<
六、预处理指令:在编译之前进行解析处理指令
宏定义:
不带参数宏定义: #define 宏名 值
作用:在预编译的时候,将代码中所有出现宏名地方都替换成值
带参数宏定义:#define 宏名(参数列表) 表达式
作用:在编译预处理的时候,使用表达式替换出现宏名列表的地方
#define SUM(x,y) ((x) (y))
SUM(10,20) ==== ((10) (20))
条件编译:如果满足条件就编译if后面的语句
#if 条件表达式
语句;
#elif
语句;
#endif
1、防止头文件的重复包含
2、可以处理项目上线与开发两种状态下执行不同代码
文件包含:
#inclue:拷贝文件
#inclue '' 包含自己写头文件
#inclue <> 包含系统自带头文件
7、typedef
1、给基本数据类型起别名
typedef int Integer;
2、给结构体起别名
typedef struct{
int age;
} Person;
3、给枚举类型起别名
typedef enum{
Man,
Woman,
Other
} Sex;
4、指针类型起别名
typedef int * Int;
Int p;
5、给函数指针起别名
int sum(int num1,int num2) {return num1 num2; }
typedef int (*Pointer)(int,int);
Pointer sumPointer = sum;
sumPointer();
学习基地(见评论区)
很多人的学习环境就是课堂,离开了课堂,自己学的时间少之又少,少了份气氛,就算逼着自己去学习,慢慢的也会觉得枯燥,有问题不会也没有人去问,可以找一个C/C 交流学习群,集合了众多志同道合的朋友,这样对你学习会起到一定的暗示作用,有问题也可以在群里讨论。
写在最后
喜欢此篇文章或觉得这篇文章对你有帮助的读者可以点播关注或者转发,以便帮助更多对如何学习C/C 迷茫的小白。
=->学习基地见评论区