导图社区 高级编程语言程序设计-函数(下)
高级程序语言设计C函数部分知识点总结(上篇),包括初学所有函数知识点,知识全面详细,干货满满,现在不收藏,还在等什么呢。
社区模板帮助中心,点此进入>>
互联网9大思维
组织架构-单商户商城webAPP 思维导图。
域控上线
python思维导图
css
CSS
计算机操作系统思维导图
计算机组成原理
IMX6UL(A7)
考试学情分析系统
函数 2
有默认参数的函数
引入
已经定义了某个函数,并进行了大量的应用,后来随着要求的增加,需要扩充函数的功能并增加相应的参数来满足扩充的功能
含义
对函数的某个形参,大部分情况下都对应同一个参数值时,可以采用默认参数
默认值建议为常量
便于函数功能扩充,减少代码维护、修改的工作量
允许有多个默认参数,但必须是连续的最后几个
若多个默认参数,调用时前面使用缺省值,后面不使用缺省值,则前面也要加上
若函数定义在调用函数之后,则声明时必须给出默认值,定义时不再给出
即使定义是给的值和声明时的一样,也错误
重载和带默认参数的函数一起使用时,可能会产生二义性
局部变量和全局变量
局部变量
定义:在函数内部定义,只在本函数范围内有效(可访问)的变量
使用:不同函数内的局部变量可以同名
执行不同函数时依次分配/释放,不同时刻占用不同/相同(不保证)的内存空间,互不干扰
形参等同于局部变量
全局变量
定义:在函数体外定义,被多个函数所共用的变量
使用:从定义点到源文件结束之间的所有函数均可使用
全局变量在某个函数中被改变后,其他函数再访问则得到改变后的结果
全局变量不在某函数被调用时保存在“现场栈”中
递归函数各层均可访问同一全局变量
使用注意:加以限制,提高程序通用性和可靠性
别处无意修改会导致结果变化
变量属性summary
分类
按类型
字符型
整型
浮点型
布尔型
........
按作用域
按存储方式(生存期)
动态存储变量
静态存储变量
按存储位置
内存变量
寄存器变量
生存期和作用域
变量的存储类别
应用代码执行时的内存分布
程序(代码)区
存放程序的执行代码
静态存储区
程序执行中,变量占固定的存储空间
动态存储区
程序执行中,变量根据需要分配不同位置的存储空间
局部变量的存储
auto 自动变量
函数进入后,分配空间,函数运行结束后,释放空间
重复进行
static 静态局部变量
变量所占存储单元在程序的执行中 均不释放(无论函数体内外)
使用
自动变量占动态存储区,静态变量占静态存储区(缺省声明为自动变量)
定义时赋初值
自动变量在函数调用时执行,每次调用均重新赋初值
静态局部变量在第一次调用时执行,以后每次调用不再赋初值,保留上次调用结束时的值
定义时不赋初值
自动变量的值不确定
VS2019 error:使用了未初始化的局部变量 Dev:赋予不可预知值
静态局部变量的值为0('\0')
函数的形参同自动变量
register int a;
对于一些频繁使用的变量,可放入CPU的寄存器中,提高访问速度
仅对自动变量/形参有效(即不能长期占用!!)
系统自动判断(即使定义的register,是否放入寄存器需要编译系统决定)
同inline内联函数
用extern扩展全局变量的使用范围
extern int a;
引入原因
全局变量从定义点到源文件结束之间的所有函数均可使用,为了能在其他部分使用变量,需要进行适用范围的扩展
使用方法
extern说明,extern不分配存储空间,只说明对应关系
全局变量的存储
外观全局变量
所有源程序文件中的函数均可使用
其他源程序文件中+extern声明
静态全局变量
只限本源程序文件的定义范围内使用
static
两者均在静态数据区中分配,不赋值则自动为0 不同源程序文件中的静态全局变量允许同名 静态全局变量可与其他源程序文件中的外观局部变量同名
变量的声明与定义
定义
指定变量的类型、名称并分配存储空间
int a;
声明:指明变量的相互关系,不分配存储空间
内部函数和外部函数
内部函数
仅能在本源程序中被调用的函数
statis 返回类型 函数名(形参表)
不同的源程序文件中可以同名
外部函数
可以在所有源程序中被调用
本源程序文件中直接使用
其他源程序文件中加函数说明
可加extern,也可以不加
头文件
头文件的内容
结构体类型(struct)及类(class)的声明
函数的声明
inline函数的定义与实现
符号常量的定义及常变量的定义
全局变量extern声明
其他需要的头文件
作用
将编程者需要的再不同源程序文件传递的各种信息归集在一起 方便多次调用以及集中修改
在一个源程序文件中包含头文件时,头文件的所有内容会被理解到包含到#include位置处,编译时(变量的定义及函数作用域等)均当作一个文件处理
头文件的包含方式
#include<文件名>
直接到系统目录中寻找,找到则包含进来,找不到则报错
#include "文件名"
先在当前目录中寻找,找到则包含进来 找不到则再到系统目录中寻找,找到则包含进来,找不到则报错
math头文件
C
#include<math.h>
C++
#include<cmath>