函数
库函数
进行封装的基础c语言代码,引入头文件后就能现成用了,不用再重复写代码,提高效率。
自定义函数
函数的组成:
返回类型,函数名称,函数参数
例题一
比较两个数字中的较大数
首先写主函数,int main
其次需要注意要定义出来get_max函数,因为需要get_max给我们返回一个较大数,所以需要 int m=get_max。
上面写的是我们自定义的函数get_max,这里用到了一个三目操作符。
注意:函数后面的括号里面不能加双引号
那么怎么判断函数需不需要return呢?
需要看我们要让这个函数去干什么。
第一个函数我需要让他帮我算出来较大值,然后告诉我,那就得返回return,因为是整形所以用int去接收这个返回值。
第二个函数只需要打印出来hehe就算完成任务了,那么就不需要返回,不需要返回时用void。
例题二
给出两个数,将两个数的数值进行交换
这个代码逻辑上是没有问题的,但是运行之后发现并不能达到我们想要的结果,那这个时候就需要进行调试来发现其中的问题,所以一定要学会调试!
通过调试我们可以发现,ab的地址和xy的地址是不一样的,所以问题就在于,xy只是接收了ab的数值,函数内部在xy发生数值交换时,并没有影响到ab。
这时候引入一个概念:形式参数和实际参数
当实参传递给形参的时候,形参只是实参的一份临时拷贝,对形参的修改不会影响到实参
这时,我们需要用到指针,也就是地址。
修改a的值有两种,第一种直接修改a的值相当于把之前a的地址抹去再在一个新的地址去给a赋值(回来试验一下)
已经验证了,这样说是不对的,直接改只是修改值并没有修改地址。
而第二种间接改相当于我找到a的地址,然后把新的值换到原来的地址中去。
那么我们就可以这样修改上面的代码
每个变量分配的地址是唯一的,通过地址改数值就能确定到唯一的地址指向的那个变量的值。
把a,b的地址取出来,放到指针变量里面去,再把地址作为参数传递过去,最后通过地址的解引用,完成ab数值的交换。
px指向a的地址,加个*解引用变成*px就=a了
如果把*去掉,那么交换的是指针变量所指向的内存空间,也就是交换了两个地址,并没有影响到外部的a,b
什么时候需要传地址什么时候不需要呢?
当你想要改变实参的参数或者形参影响实参时请传输地址,形参不用影响实参时不需要传地址。