关于局部变量,全局变量,作用域,生命期的概念,程序内存分析
来源:互联网 发布:阿里云ecs教程 编辑:程序博客网 时间:2024/06/09 16:04
1,只能定义在他的区域或者语句中;
2,同一区域不能定义同一名变量
3,在变量所处区域的子区域重新定义同一变量,则大区域的变量被屏蔽
全局变量:
1,在函数外部定义的变量为全局变量
2,有效区域是从定义开始,到源文件结束
3,全局变量依然有定义屏蔽
4,结构化程序设计尽量不用全局变量;
作用域:
程序中的一段区域,c程序中每个名字都有唯一的实体对应;
全局作用域:文件作用域:从文件第一行到文件结束的区域
局部作用域:
函数作用域:从函数投开始到函数结束;
块作用域:由复合语句的大括号{}界定的区域
类型声明作用域:在结构体,共用体声明的大括号
函数原型作用域:形参列表所处的作用域;
多文件的作用域:
作用域规则:
1,同一个作用域不允许有相同名字的实体
2,实体包含它的作用域内,从定义或声明的位置开始,按文件的顺序往后直到作用域结束均是可见的;
3,可屏蔽大区域的实体,若自区域有同名实体;
4,可使用extern声明将变量或者函数实体的可见区域前伸,成为前置声明
5,变量或者函数实体使用 static修饰,则实体对于其他源文件是不可见的;
extern 不能给变量赋初值 作用是将全局变量前伸到定义处
int a=1,b=2;//全局变量
int c=10,d=11;//全局变量
void f1(int n,int m)
{
int x=21,y=22,z=23;
extern int h,k;//到此刻下面定义的h,k就可用了
n=n+t;
if(n>100)
{
int x=31,t=20;
n=x+y;
}
if(m>10){
int y=41;
n=x+y;
}
}
}
全局变量在不同文件中不能同名,也不能有相同的函数,因为连接会出错。
全局变量可以用在不同文件中;
不同文件的对象冲突
用static将对象设计成文件的”私有“;
不同的对象共享:
用extern把对象声明延伸
c源程序编译连接后成为二进制的可执行文件成为程序映像
elf文件格式:
内存从高到低:
命令行数据环境变量
自由空间{
栈 (向低内存地址生长)存放c程序中所有局部的非晶态型变量,临时变量,形参和函数返回值
运行时不会分配栈,只有调用函数时,才会分配
函数结束释放栈,如果不初始化,变量值是随机的;
堆(向高内存地址生长): 存放c程序中的动态分配的存储空间
可以通过对动态内存的申请,来分配堆,释放堆。
堆由程序员制定分配的大小,释放和分配时间;
}
静态空间{
未初始化数据段(未初始化的全局和静态变量,运行前数值全是初始化为0)
已初始化数据段(编译时已经确定了初值,运行时,没有初始化的动作)
代码段 全局常量(const)字符串常量,。。。
}
生命期:
对象是内存中具有类型的存储区
动态存储:系统为对象动态的分配存储空间;
static 返回类型 函数名(){
static 类型 变量名=初值;//这条语句在编译时已经完成赋值,所以运行时不会再运行这一条;
}
静态局部变量生命周期是整个运行时期
全局变量本来就是static的,
被调函数的代码嵌入到主调函数中
inline 返回类型 函数名()
{}
或者在函数原型声明时加入inline
注意:内联的声明必须在调用之前
会增加目标代码量,内联函数以目标代码的增加换取运行时间的节省
内联函数不允许用循环语句和switch语句
递归函数也不能用做内联函数,无法嵌入时,会忽略inline声明
应用在规模小,语句不多,语句简单而且频繁被调用。
递归算法:
Hanoi塔的问题
(1)分解为简单的问题
分别送一块两块开始
分治法:
基本原理:将一个规模为n的问题分解为k(1<k<n)个规模的问题
1,分解
2,解决
3,合并
例:整数划分问题
- 关于局部变量,全局变量,作用域,生命期的概念,程序内存分析
- 局部变量,全局变量,静态变量的作用域,生命期?
- 变量、内存属性、作用域、生命期
- js全局变量和局部变量的作用域分析
- 局部变量和全局变量的作用域
- 作用域、局部变量、全局变量
- 9、变量的作用域--(全局变量和局部变量)
- 变量(对象)“生命期”和“作用域”的关系
- 关于对javascript的局部变量以及全局变量作用域的追踪
- 关于C语言中的局部变量和全局变量的分析
- C++的局部变量和全局变量的作用域
- 局部变量和全局变量的作用域的首次理解
- c++中全局变量,全局静态变量,局部静态变量,局部变量的作用域和生命周期
- 全局变量和局部变量作用域
- js 作用域 .局部变量,全局变量
- 局部数组变量生命期结束的那些事
- 理解函数作用域链、局部变量和全局变量、闭包等概念
- js 全局变量、局部变量的作用域;变量声明提前;无块级作用域
- Scrapy入门教程
- NDK学习笔记:Android.mk
- 如果你毕业还喜欢我的话,那么我们就在一起吧--HZ
- Kinect2+Opencv绘制声源定位方向
- HTML中href和src的区别
- 关于局部变量,全局变量,作用域,生命期的概念,程序内存分析
- 前端展示后台处理进度
- NOIP2016 简要题解
- 接触前端,吐槽一下
- (12)向量组的线性相关性
- 为什么要用Mybatis框架---Mybatis学习笔记(一)
- FPGA学习资源
- CSS3边框 圆角效果 border-radius
- Hibernate的初始化