c++变量类别
来源:互联网 发布:qq社交软件 编辑:程序博客网 时间:2024/05/22 01:57
一.动态存储方式和静态存储方式
从空间角度划分,即变量的作用域分为全局变量和局部变量。
而从变量的存在时间划分,可以分为静态和动态存储方式。
内存中用户使用的存储空间可以分为3部分:
(1) 程序区
(2) 静态存储区er
(3) 动态存储区
数据存放在静态和动态存储区,其中全局变量存放在静态存储区,而动态存储区存放以下数据:
(1) 函数形参。在调用函数式给形参分配存储空间。
(2) 自动变量未加static声明的局部变量
(3) 函数调用时的现场保护和返回地址。
所谓动态存储方式,是指函数调用开始时分配动态存储空间,函数结束时释放这些空间,是程序根据需要动态的分配存储空间。
而静态存储方式,程序运行期间系统分配固定的存储空间的方式。
在c语言中,每一个变量和函数都有两个属性:数据类型和数据的存储类别。存储类别分为两大类:静态存储和动态存储。具体包括四种:auto(自动).静态(static),寄存器(register),外部的(extern)
二.存储类别
1. auto变量
函数中的局部变量如果不专门声明static存储类别,都是动态分配存储空间,数据存储在动态存储区中。
Auto,变量实际上就是自动存储类别,它属于动态存储方式,实际上由于编译器隐含为“自动存储类别”,.所以Auto可以省略。
例如:
Int a,b;
等价于:
Auto int a,b
2. static声明局部变量
有时候函数调用结束后不消失而保留原值,这时局部变量就是“静态局部变量”,用关键字static进行声明。例如:
Void main()
{
Int sum();
For(int i=0;i<2;i++)
Printf(“%d\n”,sum());
}
Int sum()
{
Auto int a=1;
Static int b=1;
a=a+1;
b=b+1;
return a;
//return b;
}
当return 时,结果是 2,2,
当return b时,结果是2,3;
说明:
(1) 静态局部变量属于静态存储类别。
(2) 静态局部变量只赋初值一次,也就是说static b=b+1;值运行了一次
(3) 静态局部变量只作用于当前函数中,其他函数不能引用
3,register变量
一般情况下,变量时存在内存中的,如果有一些变量使用频繁,如一个循环循环1000次,每次都要引用某个局部变量,这时,我们就可以声明一个寄存器变量,以加快运算速度。
例如:
Void main()
{
Int f(int n)
Int n=1000;
Long rel=f(n);
Printf(“%d”,rel);
}
Int f(int n)
{
Register long I,f=1;
For(i=1;i<=n;i++)
F=f*I;
Return(f);
}}
说明:
(1) 只有局部自动变量和形参可以作为寄存器变量
(2) 寄存器数目有限,不能定义任意多个寄存器变量
(3) 局部静态变量不能定义为寄存器变量
这个原因是什么大家应该清楚吧,一个内存,一个寄存器,冲突了。
其实,当今编译器已经可以自动将那些使用频繁的变量放在寄存器上了,所以我们不必再次声明了。我也尝试过,声明和不声明时间差不大,具体原因就是因为,当前编译器自动识别了。
4.用extern声明外部变量
与静态变量子作用在本函数中的作用域相反,使用extern可以扩张变量的作用域。
外部变量时在函数外部定义的全局变量,它的作用域是从变量定义处开始,到本程序文件的末尾。在此作用域内,全局变量可以为程序中各个函数所引用。
例如:
在第一个文件中file.c中:
#include <stdio.h>
Int A=13;
Void main ()
{
Ertern A;//说明是外部变量
Printf(“%d\n”,A);
}
然后创建一个file1.c
#include <stdio.h>
Ectern A;
Void main ()
{
Printf(“%d\n”,A);
}
输出结果是13
说明:
(1) 使用全局变量应慎重,因为执行一个文件中的函数式,外部变量值就会改变,从而影响另一个函数的执行结果。
(2) 在编译遇到extern时,先在本文件中找到外部变量的定义,如果找到,就在本文中扩展作用域,如果找不到,就在连接时从其他文件中找到外部变量的定义,如果找到了就扩展到本文件的作用域,再找不到就报错。
最后,还有一个变量的修饰符,也很常见const。其实这就是一个常量修饰符,相当于预定义#define,const的特点就是它的值是不能改变的,一旦定义,值就是固定的了。
例如:
Const int a=10;
A=20;
这样再编译就会出错。
- C语言变量存储类别
- C语言:变量存储类别
- C语言变量的存储类别
- C语言中变量的储存类别
- C语言变量的存储类别
- C语言变量的存储类别
- C语言变量的存储类别
- C语言变量的存储类别
- C语言变量的存储类别
- c/c++ 中变量的存储类别
- 7.2 C语言变量的存储类别
- C语言变量的存储类别专题讲座-学C者必看
- c中内存分配&变量的存储类别
- C/C++中的变量存储类别以及内存分配
- C/C++中的变量存储类别以及内存分配
- C语言温习笔记之变量的存储类别
- C学习笔记1-变量的存储类别
- C/C++中的变量存储类别以及内存分配
- 使用 Git 管理源代码
- Android多级文件夹建立
- free 内存解析
- c++ 函数重载
- Java将数据写入Oracle的Clob字段中
- c++变量类别
- 17 Tips On Working At A Startup
- 查询某类文件
- 设计模式--创建模式--简单工厂模式--java
- 骑士巡游问题的warnsdorff规则
- 根据手机号码查询归属地
- 自定义Android电子时钟控件
- HTML---第一天(2013年1月15日)
- Android学习备忘004——使用ViewFlipper实现滑动翻页