c89 中的变量生存期,作用域,存储位置总结
2008-11-23 16:24
267 查看
作用域:变量名有效的范围
存在期:变量在程序中存在的时期.
存储方式:auto, register, extern, static
存储空间类型: 栈(stack):自动分配和清除的变量.如:局部变量和函数参数等
堆(heap):由malloc等函数分配的空间.
(在c++里这叫自由存储区,而把new得来的空间叫做堆)
全局/静态存储区:存储全局变量和静态变量.
常量存储区:存储常量(常量字符串,magic number等),不允许修改.
凡是存在期为全程的对象(变量,数组等)都具有”一次初始化”的特性,即只在程序开始前初始化一次(之后再遇到初始化语句就会跳过,当然其他赋值语句不会跳过).
它们都分配在全局/静态存储区.
它们初始化时的右值可以是一个初始化表达式(由文字量/符号常量/基本运算符(赋值和自增减运算符例外)组成).若没有初始化语句,会自动置零(包括数组).
----by Bryan.Wong
整理的这些东西说不定还是有疏漏,谁发现了记得告诉我一声.顺便说说一个我在c89和c99标准中没有找到说法的问题(不太会查ansi c标准,汗):c89允许定义static的结构体吗?c99呢?
存在期:变量在程序中存在的时期.
存储方式:auto, register, extern, static
存储空间类型: 栈(stack):自动分配和清除的变量.如:局部变量和函数参数等
堆(heap):由malloc等函数分配的空间.
(在c++里这叫自由存储区,而把new得来的空间叫做堆)
全局/静态存储区:存储全局变量和静态变量.
常量存储区:存储常量(常量字符串,magic number等),不允许修改.
[/b] | 类型[/b] | 补充[/b] | 作用域[/b] | 存在期[/b] | 初始化[/b] |
外部定义(函数外面) | 全局变量(外部变量) | 为了后定义先使用:可用extern外部变量说明. | 全局 | 全程 | 一次初始化 |
静态外部变量 | 文件 | 全程 | |||
外部数组 | 全局 | 全程 | |||
静态函数 | 文件 | n/a | n/a | ||
普通函数 | 全局 | n/a | n/a | ||
内部定义(函数里面) | 静态局部数组 | 局部 | 全程 | 一次初始化 | |
静态局部变量 | 在函数外只能赋一次值 | 局部 | 全程 | 一次初始化 | |
普通局部变量(自动变量) | 局部 | 局部 |
它们都分配在全局/静态存储区.
它们初始化时的右值可以是一个初始化表达式(由文字量/符号常量/基本运算符(赋值和自增减运算符例外)组成).若没有初始化语句,会自动置零(包括数组).
----by Bryan.Wong
整理的这些东西说不定还是有疏漏,谁发现了记得告诉我一声.顺便说说一个我在c89和c99标准中没有找到说法的问题(不太会查ansi c标准,汗):c89允许定义static的结构体吗?c99呢?
相关文章推荐
- C++中变量生存期,作用域,存储位置总结
- C++的static关键字及变量存储位置总结
- C++回顾之static用法总结、对象的存储,作用域与生存期
- 作用域、全局局部变量、链接属性、存储属性、生存期、内部外部函数
- (转)java 中变量存储位置总结
- C/C++中static关键字及变量存储位置总结
- C++的static关键字及变量存储位置总结
- C++回顾之static用法总结、对象的存储,作用域与生存期
- static关键字及变量存储位置总结
- (转-经典-数据段)C++回顾之static用法总结、对象的存储,作用域与生存期
- java 栈 堆 以及 java变量存储位置
- java中变量存储位置
- 变量及函数的生存期、作用范围、链接属性
- java+内存分配及变量存储位置的区别
- 变量_存储类别、生存期
- 局部变量和全局变量在内存中的存储位置
- 打印全局、局部、static变量的地址,确定其存储位置
- c/c++变量的存储位置
- C语言变量的类型和存储位置
- 堆和栈 各种变量存储位置