函数
- 格式:
- 返回值类型 函数名称(参数列表)
{
封装进函数的代码
}
注意点
1、参数列表的格式
(数据类型 变量名称,数据类型 变量名称....)参数
参数可以有一个或者多个
2、函数的命名规则和变量相同
3、返回值和返回类型
* 返回值是什么类型,函数返回值类型就写什么类型
* return的作用就是将函数的返回值返回给函数的调用者
4、函数名称不能相同,哪怕函数返回值类型不同亦或是函数形参列表不同,函数返回值也不能相同
5、函数不能嵌套定义,哪怕编译器允许这么干,我们也不要这么干
函数在内存中的表现形式
函数形参和实参的注意点
1、如果是基本类型定义的数据作为函数的参数,那么在函数内修改形参,将不会影响外面的值
2、在函数内部不能定义和形参相同的变量(相当于重复定义)
3、调用函数时传递的实参个数必须和函数的形参个数保持一致
4、形参实参类型不同,会自动转换为形参类型
函数声明和返回值
C语言中函数遵守从上至下的执行顺序,因此,前面定义的函数后面可以使用,但是后面定义的函数必须在之前声明(声明就是告诉计算机有这么一个函数)
返回值就是把函数执行的结果返回给他的调用者
注意点
1、函数声明必须放在调用函数之前
2、一般情况下写在函数的外面而不是写在函数的里面,为了提高代码的阅读性
3、在写函数声明的时候,形参不需要指定名称(指定名称也不错)
4、如果函数返回值类型是整型,声明前面可以不用编写函数的声明(建议还是写上)
main函数
main函数是系统自动调用的函数,接收两个参数
-
main函数接收的第一个参数argc:表示第二个指向字符串数组的指针指向的数组的个数
main函数接收的第二个参数argv:这是一个指向字符串数组的指针,argv[0]是一个字符串数组,是程序的启动名,这个数组是可以动态添加的
int main(int argc, const char *argv[])
{
// ["lnj", "zs"]
// 代表数组中有一个元素
// 代表数组中有两个元素
// 默认情况下, 系统在调用main函数的时候, 会给argv这个数组中存放一个元素
// ["C:\Users\Jonathan_Lee\Desktop\C_Lessons\Code\build-76-lesson-Desktop_Qt_5_11_0_MinGW_32bit-Debug\debug\76-lesson.exe"]
printf("argc = %i\n", argc);
printf("argv[0] = %s\n", argv[0]);
printf("argv[1] = %s\n", argv[1]);
printf("argv[2] = %s\n", argv[2]);
return 0;
}
main函数的return 0 的含义
告诉系统当前程序是正常结束的, 如果return返回的不是0, 就代表告诉系统程序不是正常结束的
- 在企业开发中, 我们是可以通过控制台(CMD)在运行程序的时候给main函数传递参数的
函数递归
函数递归就是函数自己调用自己
递归可以实现循环的功能, 但是递归的性能比循环差很多
-
递归函数的内存原理
图解:
1、res调用test函数,开辟存储空间
2、test函数使用定义num开辟空间,返回test函数,内存为test又开辟一块空间
3、重复2操作,当条件不满足时返回num,返回给调用者,调用者为test函数,一层一层向上传递
4、当一个函数传递完成之后就会将内存释放
案例
-
计算b的n次幂