1,
函数 --- 实现某一个功能的
函数的定义: 实现函数
类型标识符 函数名(形式参数)
{
声明部分
语句部分
}
(1).类型标识符 (返回值的类型标识符)
返回值类型
返回值 如果没有,返回值类型 一般写成void
返回的结果的类型 与 定义返回值类型 不一致 ,以定义的返回值类型为准
返回值的类型如果不写,默认为int型
(2).函数名 --- 一般和函数功能对应
(3).形式参数 --- 函数接收数据的入口
形参 --不是一定要有,看函数功能的需要
形参没有,一般写成 void
形参使用时:
a.个数相同
b.类型匹配
c.形参 与 实参匹配顺序 -- 在ubunt18.04平台上 顺序是 从右向左
(4).函数体 --- 完成函数具体功能的代码
2.
函数定义的位置:
1)main函数之前
2)main函数之后
函数的声明
函数头 + 分号
函数声明可以放的位置,使用之前
函数调用的形式:
add(a,b); 函数调用语句
int ret;
ret = add(a,b); 函数调用在表达式中
ret = add(a,b) + 3; 表达式的一部分
函数调用作为某个函数的实际参数
printf("sum = %d\n",add(a,b));
返回值的类型标识符 函数名(形式参数) 函数头 --规定了一下函数的形式
{
函数体 --实现函数具体功能代码
返回结果 return 返回结果
}
3,
函数名:
add
形式参数:
int a,b; //形参不能这样写
数据类型 形参变量名1,数据类型 形参变量名2,...
int a,int b
函数功能:
a+b
结果:
return 结果;
函数调用:
语法:
函数名(实际参数);
4,
1)栈:
特点:
先进后出 (FILO)
linux系统上 ,默认情况下 8M 大小可以调整
主要: 局部变量
自动申请 自动释放
int a;
2)堆:
特点:大 手动申请,手动释放
字符串常量区:
char s[10] = "hello";
3)全局区(静态区)
全局变量(静态变量)
4)代码区
内存的5个区
程序 = 代码 + 数据
函数的嵌套调用:
特殊的嵌套调用 --- 递归 (自己调用自己)
递归 --就是循环
直接递归
间接递归
5,递归
sum(100) = sum(99)+100
sum(99) = sum(98) + 99
sum(n) = sum(n-1) + n; //
sum(2) = sum(1)+2
sum(1) = 1
sum(2)
sum(n) =
int sum(int n) //n = 2
{
if 递归是否结束? (n==1)
{ //结束
return 1;
}else //
{
return sum(n-1)+n;
}
}
递归函数内部的逻辑:
1.看是否递归结束了
如果结束,返回结束时的值
2.如果没结束
递归继续往下