C语言变量的存储类型
来源:互联网 发布:sql数据库误删除恢复 编辑:程序博客网 时间:2024/09/21 09:04
变量的存储类型
“这些都是用来修饰变量的,修饰函数的时候,其可能有不同的含义,请加以区分,后面会针对修饰函数来进行总结”
区分:
auto对局部变量的时候缺省会归类为自动变量,默认是不会进行初始化的,
static 生命周期是整个程序。默认是会初始化的
extern 如果为全局变量,缺省是默认归类为全局变量,默认会初始化的
register寄存器变量,不一定会申请成功。
如果想要深入的了解其中的原理的话,那我们必须首先来理解一下Linux下,内存管理部分的原理:
auto局部变量存储的地方是栈——–>不会初始化,栈的调用是循环利用的,有可能其中存储的是以前存储类型的数据。
而static和extern所存储的区域为数据段——–>会初始化
register不能定义成全局和静态的时候,说明他们存储的位置是不允许放入静态存储区域中的,生命周期仅仅局限在函数内部
如下图所示:Linux的内存分配:
下面我们来通过一个事例来看一下这写变量的存储类型:
#include<stdio.h>#include<stdlib.h>int global_variable_num;//全局变量,初始化为0,生命周期为软件运行周期static int static_global_variable_num;//静态全局变量,初始化为0,生命周期软件运行int *gloable_pointer;//全局指针变量,初始化为NULL,void func();int main(void){ printf("global_variable_num:%d\n",global_variable_num); printf("static_global_variable_num:%d\n",static_global_variable_num); printf("*gloable_pointer:%p\n",gloable_pointer); global_variable_num++; static_global_variable_num++; /**调用三次func函数,系统会每次都会为函数分配一次函数栈空间,第一次运行完之后,栈空间会被释放,然后第二次运行的时候,系统会再次分配,而第二>次分配的空间与第一次的不一定属于一个空间。以此类推*/ func(); func(); func(); return 0;}void func(){ int patical_variable;//局部变量,默认是不会初始化的,系统会自动将其归类为自动变量 auto int auto_patical_variable;//局部自动变量,不会初始化 static static_patical_variable;//静态局部变量。系统会初始化一次,并且其生命周期是整个软件的周期,存储在数据段中的静态存储区域 printf("global_variable_num:%d,static_global_variable_num:%d\n",global_variable_num,static_global_variable_num); printf("patical_variable:%d,auto_patical_variable:%d,static_global_variable_num:%d\n",patical_variable,auto_patical_variable,static_global_variable_num); register int register_variable = 10;//寄存器变量。寄存器变量,寄存器变量生命周期属于函数内部。 register_variable++; printf("register_variable:%d\n",register_variable); static_global_variable_num++; printf("static_global_variable_num:%d\n",static_global_variable_num);}
输出结果为 :
global_variable_num:0
static_global_variable_num:0
*gloable_pointer:(nil)
global_variable_num:1,static_global_variable_num:1
patical_variable:158690944,auto_patical_variable:32671,static_global_variable_num:1
register_variable:11
static_global_variable_num:2
global_variable_num:1,static_global_variable_num:2
patical_variable:158690944,auto_patical_variable:32671,static_global_variable_num:2
register_variable:11
static_global_variable_num:3
global_variable_num:1,static_global_variable_num:3
patical_variable:158690944,auto_patical_variable:32671,static_global_variable_num:3
register_variable:11
static_global_variable_num:4
以上结果可以看出来整个变量存储类型的分配和作用域,具体结果分析不在赘述,在代码块中已经详细进行讲解,谢谢
- c语言变量的存储类型
- C语言中的变量的存储类型
- C语言中变量的存储类型
- C语言的变量存储类型
- C语言中变量的存储类型
- C语言变量的存储类型
- C语言中变量的存储类型
- C语言:变量的存储类型
- C语言变量存储类型
- C语言--变量存储类型
- C语言变量存储类型
- c语言变量的存储种类和存储器类型 (转载)
- C语言支持的四种变量存储类型
- 从内存理解c语言中变量的存储类型
- 从内存理解c语言中变量的存储类型
- 从内存理解c语言中变量的存储类型
- 【C语言天天练(零)】变量的存储类型
- C语言变量的类型和存储位置
- Eclipse和Myeclipse断点调试
- Jspget传参数乱码问题
- 3、容器的使用
- accept()返回的套接字绑定哪个端口 新旧套接字的联系
- Jquery-层次选择器
- C语言变量的存储类型
- C语言实现顺序表
- ElasticSearch5+logstash的logstash-input-jdbc实现mysql数据同步
- 4、布局方法
- 怎么将JSP页面的ID值传给Action进行更新和删除
- Educate网站项目整理(一)
- 关于网络层的那点事
- NoSQL——MongoDB简介
- 1、华为C++笔试