![](https://i-blog.csdnimg.cn/blog_migrate/1f7d011eb2d95308fb82b5ae05daf8df.png)
![](https://i-blog.csdnimg.cn/blog_migrate/4e119dd75d82d37555d2ca10264a6dae.png)
![](https://i-blog.csdnimg.cn/blog_migrate/3f582051e9081a48296288c10a8cc5aa.png)
![](https://i-blog.csdnimg.cn/blog_migrate/067470aa935f307390e031d968ef0fce.png)
-
main函数是程序的入口,不调用函数自己写的函数不会被触发
-
函数说明必须要放在函数调用的前面
如果函数说明在函数调用后面,我们可以用一行来放在main函数的前面
![](https://i-blog.csdnimg.cn/blog_migrate/cbb26978b4c0d319d3a6b6856795f3e7.png)
-
为什么要引入头文件?
因为头文件中有函数说明,如果不引入头文件,那么就把需要用到的函数单拎出来进行说明
二、函数的参数传递
(函数之间参数的传递方式:1.全局变量,2.复制传递方式,3.地址传递方式)
全局变量传递
如果把函数声明里的参数全删了,则x和n就会报错,这时候体现除了参数以及传参的重要性。
在include下面定义一个double x=2,int n=3; 这个时候main函数和power里面都可以用x和n这两个变量。但是函数调用的位置不同,而且改变不方便,不建议使用。
![](https://i-blog.csdnimg.cn/blog_migrate/036c7302355035e9e28493f1d8db9cee.png)
复制传递的意思是,x的值传给a, y的值传给b
举个例子
实参是a,b,存储的分别是10,20,把实参传递给形参x,y,之后在函数中实现了传过来的值的交换,但是形参的值不会回传给实参,因此在main函数中打印出来之后依然是10,20.也就是说复制传递的方式改变不了实参变量中的赋值。实参的值传给形参,形参不会传给实参
地址传递方式(传递地址,也就是指针传递)
a,b是两个int型变量,x,y分别是指向a和b的指针,*x,*y也是形参
要交换a,b中存储的内容,交换时都要用*x,*y,因为x,y存的是地址,而*x,*y是取a,b中的内容
练习:
![](https://i-blog.csdnimg.cn/blog_migrate/d3f4b7ca6299f666d3a44feff632936e.png)
![](https://i-blog.csdnimg.cn/blog_migrate/039f3ae479b89f4b6150a63debe1e234.png)
![](https://i-blog.csdnimg.cn/blog_migrate/9ab47e6ae6e79ed149a437e85b5612b5.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e461339288a2dc0299f41f9590fad409.png)
![](https://i-blog.csdnimg.cn/blog_migrate/823e013204d47c8f7caf94aaed8968c6.png)
三、函数中传递数组参数
![](https://i-blog.csdnimg.cn/blog_migrate/a8314814eed5a3f9c0fb861c03628e5d.png)
![](https://i-blog.csdnimg.cn/blog_migrate/c8cbbb77eb2342a5ce85ef67446c0a49.png)
![](https://i-blog.csdnimg.cn/blog_migrate/fc77ac6b30662e8d8bb8f400a8263e7e.png)
![](https://i-blog.csdnimg.cn/blog_migrate/d37fc5a72d18075adc504731f608c50e.png)
四、指针函数(一)
指针函数的定义:是返回值为地址量的函数
指针函数的返回值类型是以下几种的时候才可以返回。
返回值类型:全局变量的地址,字符串常量的地址,静态变量的地址 !!!
这是一条笔试题
![](https://i-blog.csdnimg.cn/blog_migrate/5fd551925090a24a88da72c77f7e9273.png)
![](https://i-blog.csdnimg.cn/blog_migrate/914f12d7c30e379fc9e3c3a6b8f329b5.png)
-
使用strcpy函数,最好加一个头文件# include <string.h>
![](https://i-blog.csdnimg.cn/blog_migrate/9e0c6218437ad99e791e7cdc9900b3b1.png)
这个地方报什么错?该怎么修改?
str数组是在 *getstring函数中定义的,他是一个局部变量,在*getstring函数结束时,这个变量已经结束了,再返回str的值,他返回的是局部变量的地址,会警告!就和复制传递的意义是一样的!
遇到这个问题应该怎么办?
三种情况的变量存放在静态区
字符串常量
static变量
全局变量
那么我们就有三种修改代码的方法,往这三种上靠
(一)、全局变量(就是把原来定义在getstring函数中的数组,一开始就定义)
![](https://i-blog.csdnimg.cn/blog_migrate/699801d719c0206e9fbbecabd8218464.png)
(二)、static静态变量
![](https://i-blog.csdnimg.cn/blog_migrate/4d4b375a3e5f6da26ea2bdefc0a85395.png)
(三)、字符串常量
![](https://i-blog.csdnimg.cn/blog_migrate/7b06f93e8f712c9bd68b1d66a468c284.png)
五、指针函数(二)
设计一个函数需要考虑的三个点
1.函数的功能
2.函数的参数
3.函数的返回值
练习:字符串如何删除空格