C语言中变量的存储类型
2015-07-27 10:22
363 查看
一、变量的存储类型
变量的存储类型(storage class)是指储存变量值的内存类型。有三个地方可以用于储存变量:普通内存、运行时堆栈、硬件寄存器
用于声明变量存储类型的关键字:auto static register
①缺省存储类型
在所有代码块之外的变量的缺省存储类型是静态的(static),存储于静态内存中,称为静态(static)变量。静态变量在程序运行前创建,在程序的整个执行期间始终存在。在代码块内部声明的变量的缺省值是自动的(automatic),存储于堆栈中,称为自动变量(auto)。程序执行到代码块时,自动变量才创建,程序的执行流离开代码块时,这些自动变量便自行销毁。
值得注意的是,声明一个变量,若是静态的变量便会初始化为0,而如若是自动变量,则不会被初始化,也无法确定它们的值
②代码块内部用关键字声明的变量
static关键字可以使代码块内部声明的变量从自动变为静态,在程序执行过程中一直存在,但是变量的作用域不便。函数的形式参数不能声明为静态,因为实参总是在堆栈中传递给函数,用于支持递归。最后关键字register可以用于自动变量的声明,提示它们存储于机器硬件寄存器而不是内存中,即系寄存器变量。与其他存储类型的变量不同的是,寄存器变量的访问效率高,尤其是频繁执行简介访问操作的指针。
编译器不一定理睬register关键字,如果有太多变量声明为register,编译器选取前几个实际存储于寄存器中,其余的按普通自动变量来处理。
寄存器变量的创建和销毁时间和自动变量相同。
许多的机器硬件实现中,并不为寄存器指定地址。
③举个简单的例子
#include <stdio.h> #include <stdlib.h> void do_it() { unsigned int a=0; static unsigned int b; a++; b++; printf("the number of a is %d\n",a); printf("the number of b is %d\n",b); } int main() { printf("answer:\n"); do_it(); getchar(); do_it(); getchar(); do_it(); return 0; }这里三次输出a的值都为1;而输出b的值分别为1,2,3
在初次调用函数do_it()时,变量a,b被创建,调用完毕,a自行销毁,而b为静态变量,程序结束后仍保持原来的值。
相关文章推荐
- c++空类实例大小不是0原因
- 函数绑定在Java和C++中的区别
- C语言主要做哪些方面的开发---一个来自“IT技术学习”微信群的问题及答复
- C++学习总结(三)
- 【转】windows c++获取文件信息——_stat函数的使用
- c++里,输入输出方式
- C++find函数
- ios入门之c语言篇——基本函数——5——素数判断
- C语言中6组指针和自增运算符结合方式的运算顺序问题
- 读书笔记MoreEffectiveC++(13)
- c++ const 成员函数
- C语言static 详解
- 用c语言调用动态库
- C++ new malloc realloc
- c语言生成静态库.a和动态库.so
- OC语言类的扩展
- C++ new 的用法
- C语言中指针和自增运算符结合时的运算顺序问题
- 三种初步简易的方法求解数值问题 of C++
- 《C++编程思想》第二章 数 据 抽 象(原书代码+习题+答案)