导图社区 C 语言
C 语言,内容有运算符、循环、判断、占位符、常量、变量、数组、指针、函数、结构体,纯自己脑补着写的,如果有误请多多包涵,也请指出来让我知道。
编辑于2023-06-26 17:44:26C 语言
运算符
加减乘除+-*/
自增自减++ --
比较运算符大于>小于<等于==不等于!=
取商/取余%
三元运算符 (a>b)?a:b a>b 则取 a,b>a 则取 b
位运算
循环
循环是结构化编程的重要一环
do while 循环:do 一次然后判断 while,while 里面是 1 则继续执行循环,否则跳出循环,请注意,这里的 循环是必须做一次 do 的
while 循环:先判断 while 里面是否为 1 和上面的一样,只不过这里不必一定要做一次 do,如果条件为 0 则直接跳出循环,一次也不执行
for 循环:for(int i=0;i<10;i++):先执行 int i=0,接着执行 i<10,符合条件就继续循环,然后 i++,这三个条件可以写在外面,你什么可以都不写在里面,不过你会得到死循环的结果哦
continue:结束这次循环
break:结束整体循环
判断
判断是结构化编程的重要一环
if(条件):条件真就执行,假就跳过
else:这是接上面的,如果上面不成立就执行这个
if else(条件):相当于再判一次,条件成立就执行,不行就下一个
switch case:switch()这是条件,case()这是结果,哪个对应了就对哪个 case 的结果
占位符
占位符类型
%c 字符型
%d 整形
%ld 长整形
%lld 长长整形
%hd 短整形(两个字节)
%u 无符号整形
%f 浮点型(8 个字节)
%lf 长浮点型 double(16 个字节)
占位符规范
%0.xf 保留小数点后 x 位
%yd 一个数据占 y 列,左有空补空格
%0yd 一个数据占 y 列,前面有空补 0
常量
一个固定的量,大家公认的量
字符型常量('a')
字符串常量("string"),用 char[]数组来初始化,切记,不可以直接用数组下标赋值
数值常量(1、101)
实型常量(1.01)
整型常量(101)
符号常量(PI)
相对于变量
不变化的量,不随计算机计算过程而变化的量
相对于一个符号,计算机编译时将其替换,不占据内存
变量
相对于常量
一个变化的量,随着用户输入输出而改变
占据计算机内存
存储数据
整型(int)
长整型(long int)
浮点型(float)
字符型(char)
字符串类型(string)
使用时需要定义和赋值(int a=10)
数组
初始化数组
数据类型 [数组大小]
int []
char []
double []
结构体 []
数据类型 [],如果[]没有具体数字,则表明数组东西根据所最终输入的数字结果为长度
字符串可以由字符数组初始化得到,但要明白字符串类型后面有一个\0 作为结束符,并且占一个位
int [32]={1,2,3},中括号里面的各项数据用逗号隔开,这样来一一对应数组下标赋值,如果没有数据默认为 0
数组赋值
假定 a 是 int 类型的数组,则 a[数组下标]=数据,即可赋值相应数组下标的值
切记数组下标是从 0 开始的,这就意味着我们初始化一个 12 大小的数组,那我们只能去 0~11 数组下标的数据
字符串类型的数组不能直接赋值,要使用字符串函数<string.h>相关函数来实现字符串拷贝及覆盖
二维数组
如果我们想要得到一个 int [12]的数组,怎么办?再创建一个数组呗,不过类型是 int[12]的,即 int a[数据大小][12],第一个为行,第二个为列,虽然不严谨,但你可以这样认为方便些
int a[12][12]={{1,2},{2,3}},这样就完成了二维数组的赋值了,和一维其实没差什么
数组相当于一个假指针,因为有地址,且是数组第一个元素的首地址开始的连续地址
多维数组其实和二维数组的逻辑一样,就想要几个二维数组就初始化几个二维数组就可以了,这就是三维数组,以此类推
指针数组
存储着指针数据类型的数组
函数指针数组
存储着函数指针的数组,可以快速调用函数
指针
指针本质上是地址,而地址是计算机存储数据的物理空间的抽象化代表
初始化指针 数据类型 *a,例如 int *a 就是初始化了一个 int 类型的指针
int和*可以连着也可以不连着,他们两个其实可以看作一个整体,就是指针类型
*的探索
初始化 数据类型* 变量名
赋值 *a=30
去掉*就变成了地址,比如*a 去掉*的 a 其实是一个地址
指针之间是可以相互赋值的,比如*p,*q,p =q 就是让两者的地址相同,其值也就一样的,指向同一地址
得到其值 *p 就是得到 p 所在地址里面的值,和&取地址相互补
二维指针
*p 指向了一个地址,那有没有可能也有一个指针指向了*p 呢?别忘了*p 也是一个数据类型,也是有其地址的,所以是可能的,也就是二维指针
多维指针
和多维数组差不多,不过这里是指向关系
函数指针
用一个指针去指向一个函数,这个指针可以在其他函数体中调用,这样的指针就叫做函数指针,这样做的好处就是省去了写函数体的时间,直接用指针取代即可
数组指针
指向一个数组的指针(数组本质也是一个指针哦,这里的数组指针指向的是数组的第一个元素的地址)
函数
函数格式
返回值类型 函数名(变量类型 变量名,变量类型 变量名) 例如 int fun(int a,int b)
函数的返回值就是 return 后面数据的类型,你可以选择不返回任何一个值,那么返回值类型就是 void
函数声明
把函数头(就是函数格式)写在程序顶端,然后在主函数下面写这个函数的具体内容这就是一种声明,下面调用就可以了,相当于我在开始声明我有这样一个函数,我可以使用
第二中就是直接在程序顶端写函数(全部的),这样也略去了声明的步骤
实参:在其他函数体中调用一个函数,在函数里面填写的数据为实参,因为它就是真实的值,是传给调用函数所用到的数据,就是我们所输入的需要进行操作的数据
形参:就是调用的函数所写的数据类型及数据,因为没有固定的值,只是起到规范输入数据类型的作用,所以被称为形参
指针函数
函数里面有指针类型,你可以想想指针数据交换的那个函数,里面就是传的指针类型数据,所以形参也就是实参,直接交换
结构体
结构体初始化
struct 结构体名字{数据类型;数据类型}
结构体赋值
结构体名字.x 代表的就是结构体第 x 个元素,然后就像普通赋值那样赋值就可以了
typedef
typedef 是取别名,typedef struct a{int a,int b}name;就是取了个 name 的别名,让你省去了写结构体的时间,更加简洁高效
结构体本质上也是是一个数据类型,是为了让使用者更好的调用一个分散数据的工具,比如一个学生的信息,可以用结构体让其归为一个数据类型