C语言之变量类型和存储方式
来源:互联网 发布:java协程 编辑:程序博客网 时间:2024/05/18 01:33
变量可以分为全局变量、静态全局变量、局部变量和静态局部变量
变量的声明有两种情况:
1、一种是需要建立存储空间的(定义性声明)。例如int a 在生命的时候就已经建立了存储空间。
2、另一种是不需要建立存储空间的(引用性声明)。例如extern int a 其中变量a是在别的文件中定义的。
内存区域的划分:
1、栈区:由编译器自动分配和释放的内存区域,用于存放函数的参数值、局部变量等。
2、堆区:程序员向系统申请或释放。
3、全局区:用来保存全局变量和静态变量。
4、文字常量区:用来保存常量字符串的内存区域。
5、程序代码区:用来保存函数体的二进制代码。
先看一个例子:
fileOne.h头文件如下:
#ifndef DMTestVariable_fileOne_h
#define DMTestVariable_fileOne_h
// 声明全局变量
extern int globalVariable;
void addOne();
void testStaticGlobal();
#endif
fileOne.c文件如下:
#include <stdio.h>
#include "fileOne.h"
// 静态全局变量
static int staticGlobalVariable = 12;
void addOne()
{
// 全局变量加1
globalVariable += 1;
}
void testStaticGlobal()
{
// 静态全局变量加1
staticGlobalVariable += 1;
printf("静态全局变量:%d\n",staticGlobalVariable);
}
main.c文件如下:
#include <stdio.h>
#include "fileOne.h"
// 定义性声明全局变量
int globalVariable = 10;
void test()
{
// 静态局部变量
static int staticLocalVariable = 20;
staticLocalVariable += 1;
printf("静态局部变量值:%d\n",staticLocalVariable);
}
int main(int argc, const char * argv[])
{
// 局部变量测试
int localVariable = 15;
printf("局部变量%d\n",localVariable);
// 全局变量测试
addOne();
printf("全局变量:%d\n",globalVariable);
// 静态局部变量的测试
for (int i = 0 ; i < 2; i++) {
test();
}
// 静态全局变量
for (int i = 0 ; i < 2; i++) {
testStaticGlobal();
}
return 0;
}
输出结果如下:
总结如下:
全局变量,具有全局作用域,只需在一个源文件中定义,就可以作用于所有的源文件,当然其他不包含全局变量定义的源文件需要用extern关键字再次声明这个全局变量,如代码中的
// 定义性声明全局变量
int globalVariable = 10;
全局变量,定义在main.c源文件中,在fileOne.c源文件中使用时有以下代码再次声明
// 声明全局变量
extern int globalVariable;
静态全局变量,只能在其所在文件模块中的函数中使用,其他文件模块中的函数不能访问。如代码中的
// 静态全局变量
static int staticGlobalVariable = 12;
只能在fileOne.c源文件中使用,不能在main.c源文件中使用。
局部变量:只能在定义该变量的函数体内使用。如代码中的
// 局部变量测试
int localVariable = 15;
只能在main函数中使用。
静态局部变量:在函数内定义,但当函数退出后,静态局部变量始终存在,其占用的内存单元不会被释放,直到程序结束时才被释放。退出函数后尽管该静态局部变量还存在,但是不能使用它,如果再次调用定义该静态局部变量的函数,它又可以继续使用,而且保存了上次调用之后留下的值。如代码中的
// 静态局部变量
static int staticLocalVariable = 20;
第一次调用test()函数输出的此静态局部变量值为21,第二次调用函数test()输出的此静态局部变量值为22。
C++ Primer Plus 第6版 中文版 清晰有书签PDF+源代码 http://www.linuxidc.com/Linux/2014-05/101227.htm
读C++ Primer 之构造函数陷阱 http://www.linuxidc.com/Linux/2011-08/40176.htm
读C++ Primer 之智能指针 http://www.linuxidc.com/Linux/2011-08/40177.htm
读C++ Primer 之句柄类 http://www.linuxidc.com/Linux/2011-08/40175.htm
将C语言梳理一下,分布在以下10个章节中:
- Linux-C成长之路(一):Linux下C编程概要 http://www.linuxidc.com/Linux/2014-05/101242.htm
- Linux-C成长之路(二):基本数据类型 http://www.linuxidc.com/Linux/2014-05/101242p2.htm
- Linux-C成长之路(三):基本IO函数操作 http://www.linuxidc.com/Linux/2014-05/101242p3.htm
- Linux-C成长之路(四):运算符 http://www.linuxidc.com/Linux/2014-05/101242p4.htm
- Linux-C成长之路(五):控制流 http://www.linuxidc.com/Linux/2014-05/101242p5.htm
- Linux-C成长之路(六):函数要义 http://www.linuxidc.com/Linux/2014-05/101242p6.htm
- Linux-C成长之路(七):数组与指针 http://www.linuxidc.com/Linux/2014-05/101242p7.htm
- Linux-C成长之路(八):存储类,动态内存 http://www.linuxidc.com/Linux/2014-05/101242p8.htm
- Linux-C成长之路(九):复合数据类型 http://www.linuxidc.com/Linux/2014-05/101242p9.htm
- Linux-C成长之路(十):其他高级议题
本文永久更新链接地址:http://www.linuxidc.com/Linux/2014-08/105600.htm
- C语言之变量类型和存储方式
- C语言之变量类型和存储方式
- C语言各种类型变量存储方式
- C语言之变量的存储方式和生存周期
- 【精】C语言之变量存储类型
- c语言之变量存储类型
- C语言变量类型和存储分配
- C语言编程之道 (有感 静态变量和动态变量, 静态存储方式和动态存储方式 堆+栈)
- C语言变量存储类型
- C语言--变量存储类型
- C语言变量存储类型
- c语言变量存储方式
- c语言变量的存储种类和存储器类型 (转载)
- C语言---变量存储类型和多文件系统
- C语言变量的类型和存储位置
- C语言之变量的作用域及存储方式
- C语言 变量的存储方式和生命周期
- C语言中变量的存储方式和生存期
- qt出现 undefined reference to pcap_xxx
- redis基础简介(五)- 数据备份与恢复、数据安全、性能测试、客户端连接、分区
- 构造函数线程安全-即dubbo的extensionLoader存在线程安全问题
- This version of Android Studio is incompatible with the Gradle Plugin used.
- Hive动态分区
- C语言之变量类型和存储方式
- Spring cache 配置代理 改为aspectj
- 新年新气象,新的一年新的开始,给自己定个小小的目标,以此为证
- spring-boot配置文件-security(中文翻译)
- JS中的this指向相关
- 自定义控件实践——单选/多选文本标签流
- centos下安装nginx
- hibernate联合主键
- C++所有容器的共同操作