c语言2
7.1知识点
函数概述
c语言总是将main函数作为程序的入口,都要在main函数中运行程序,其他函数都直接或间接在main函数中被调用
函数分类
从函数定义的角度
- 标准函数(库函数)
都需要用#include导入
- 用户自定义函数
从函数返回值的角度
- 有返回值的函数
以return作为结尾的函数
- 无返回的函数
用于完成某项特定的处理任务,不返回函数值
需要指定为“空类型”,空类型的说明符为"void”
从主调函数和被调函数之间数据传递的角度
-
无参函数
-
有参函数
7.2知识点
函数定义
- 无参数函数
类型说明符 函数名()
{
函数体
}
- 有参数函数
类型标识符 函数名(形式参数表列)
{
声明部分;
语句部分;
}
函数返回值
被调用完后,执行函数体中的程序段所取得的值,该函数将返回给主调函数
说明
- 函数的值只能通过return语句返回主调函数
return语句形式
return (表达式);
-
当函数类型与return语句的数据类型不一致时,以函数类型为准,自动进行类型转换
-
在函数定义时若忽略了类型说明符,则默认函数返回值类型为整型
-
不需要返回时,可以定义为“空类型”
7.3知识点
函数调用
一般形式
函数名(实参表列)
函数调用需要的条件
-
首先被调用的函数必须是已经存在的函数
-
如果使用库函数,则需要选导入#include
-
如果使用自定义函数,而该函数的位置在调用它的函数的后面,应该在主调函数中对被调用的函数作声明。用点人能听懂的话来说就是,函数在被调用前,要先定义
7.4知识点
数组元素作函数实参
- 用法和简单变量相同
数组名作函数参数
-
要求行参和实参必须都是类型相同的数组名
-
使用指针也可以实现地址传递
-
双向进行,即传递后,在被调函数内若改变了行参的值,那么原数组(实参)也会改变
7.5知识点
函数的嵌套调用
-
不能嵌套定义
-
可以嵌套调用
7.6知识点
函数的递归调用
- 函数的递归调用是指一个函数直接(调用一次)或间接(a调用b,b调用c...)地调用自身
两个不错的例子(很重要)
void fun(int n)
{
if(n > 0)
{
fun(n-1);
}
printf("%d", n);
}
int main()
{
int m = 3;
fun(m);
}
- 该例子运行结果为0123
原因如下
最后一次调用n为0时,直接执行一次printf(输出了0),随后由于该函数为空类型,则会继续执行主调函数调用的地方的下一句,因此,又执行了一次printf(输出了1),以此类推...
int fun(int n)
{
if(n > 0)
{
fun(n-1);
}
return n;
}
int main()
{
int m = 3;
printf("%d", fun(m));
}
- 该程序输出的结果是3
7.7知识点
局部变量
- 变量只作用与局部
全局变量
-
变量可以在任何地方调用
-
定义时,只需写在任何函数之外即可
7.8知识点
静态存储方式
- 静态存储方式是指程序运行期间分配固定的存储空间的方式
动态存储方式
- 动态存储方式是指程序运行期间根据需要动态分配存储空间的方式
变量的存储类别
- 数据的存储类别分为自动型(auto)、静态类型(static)、寄存器类型(register)、外部类型(extern)
auto变量(默认)
-
如果不指定存储类别,则默认为auto
-
属于动态存储方式,被分配在动态存储区。调用结束后,auto变量的值不保留
static变量
-
static 声明静态变量
-
静态变量属于静态存储方式
-
能使局部变量获得全局变量的特性
register变量
-
一般变量默认存储在内存中,而register变量直接存储在寄存器中,可以显著提高效率
-
一般情况下,不需要刻意定义register,因为系统会把经常访问的变量默认放在寄存器中
-
寄存器数目有限,2~3个为宜
extern变量
- 作用只有一个,即当全局变量定义在调用后时,需要声明,使用extern声明
本文作者:wedfrgt
本文链接:https://www.cnblogs.com/wedfrgt/p/16145330.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步