hello,大家好!今天依然准时来整理知识!
接上回:
第五部分 结构体
结构体是一种同时存储几种不同类型的数据的结构,基本格式是
struct 结构体名称{
结构体的成员变量(要同时存储哪几个变量)、结构体的成员函数(可以用结构体当做下一结构体的成员,也就是说可以用一个结构体的类型来定义一个结构体变量,这个结构体变量又被放在另一个结构体里面,可以理解为结构体套娃),注意这两个至少要有一种中的一个。
}(可以加一个结构体数组);
注意,在结构体定义的末尾“}”后面一定要加分号。而且结构体中的数据是互相关联的。这里有一个冷知识:如果你在分号前面没有定义结构体数组,那你可以在下面用(结构体名)+变量名来变相定义一个结构体变量。结构体可以没有名字。
这里又有冷知识了:在定义结构体时,是不分配内存的;但是定义了结构体的成员,就分到了内存。你可以理解为:结构体是一辆车,把内存理解为一些钱,空车是不给钱的,但是车上有了货,就能挣到一些钱了。
结构体的成员可以整体操作,比如后面要讲的结构体排序,结构体类型的数组可以直接sort;初始化也可以用“打表”来做,还是很方便的。成员调用只需要一个“.”(成员运算符,在字符串那部分见到过),优先级最高。
第六部分 函数
6.1 自定义函数
函数是一段独立的程序,可以执行一个特定的功能,可以被其他语句来用。函数有两种:标准函数,比如sort;和自定义函数。
自定义函数的基本格式是:函数结果的类型 函数名(函数参数(函数里要传过来的变量·))
程序段;
返回函数结果;
}
程序语言里的函数跟数学函数的形式基本一致,是多个命令的结合。
6.2 函数的调用和参数
函数可以直接传递一个值导进函数体里。基本的引用函数格式是 函数名(传递的值);
函数是可以互相调用的,像struct那样嵌套,可以在一个函数里调用另一个函数。
注意:在引用函数时,括号里的值叫做“实参”(实际参数,参加运算),在函数内定义的参数是形参(形式参数,用来导入实参的值用于计算)。
这里有个小干货:函数如果没有返回值(比如我讲过的SPFA函数),他的类型为void。比如在函数里直接输出的形式。
6.3 传值调用和传址调用
传值调用是一般的调用,就是刚才讲的那种调用方式;是复制了实参来传值的。还有一种传地址的调用,它主要作用于需要交换排列时,比如两个数字交换。这样的值没法返回。这种调用则可以解决这个问题,因为他是传地址的,能双向传值。取地址传参的基本格式是这样:
函数 (&变量名) ,实际上是把函数的形参变成了实参的指针。这种比较小众,但也很实用。
6.4 函数的类型
空函数:占位置
有参函数:一般的函数
无参函数:一般为void,不需要返回值
6.5 递归
递归实际上就是一个函数类型的循环,能够无限循环直到找到结果为止。递归就是函数自己调用自己,来达到循环的效果。一切用循环能做的事,递归都可以做。
递归的基本格式是:
函数名 (参数){
递归结束条件;
调用自己;
}
递归是把问题拆成若干个小问题,在逐步往下拆,直到解决了最小的子问题,下层子问题解决了,上层的主问题也就解决了。这实际上是用栈的机制来解决问题的。
第七部分 运算符
1,赋值:=
2,算术运算:
+加 -减 *乘 /除 %取余 ++自增 --自减(优先级高)
3,关系运算:
==相等
!=不等
>=大于或等于
<=小于或等于
<小于
>大于
4,二进制逻辑运算
逻辑或 v 有一个是1就是1
逻辑与 ^ 全是1才是1
逻辑非 ¬ 取反
异或 ⊕ 左右一样是0,否则是1
5,二进制按位运算
按位与& 与逻辑与一样
按位或| 与逻辑或一样
按位异或^ 与逻辑异或一样
按位取反~ 与逻辑取反一样,诸位取反
左移>> 将数字所有二进制位左移(右边补0)
右移<< 将数字所有二进制位右移(左边补0)
好了,今天就分享到这吧,饿死我了,我要去干饭了。拜拜!