Chinaunix首页 | 论坛 | 博客
  • 博客访问: 179313
  • 博文数量: 38
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 346
  • 用 户 组: 普通用户
  • 注册时间: 2013-12-04 00:06
文章分类

全部博文(38)

文章存档

2016年(3)

2015年(15)

2014年(16)

2013年(4)

我的朋友

分类: LINUX

2014-04-02 17:42:07

1.变量定义
变量采用先定义 后使用的原则
   定义与初始化区别:
定义需要分配内存空间 初始化不需要分配内存。
2.变量的作用域
局部变量:在函数内部定义
全局变量 : 定义在所有函数外面(全局变量存在于.data段     同名局部变量会屏蔽全局变量)




c语言程序占内存分配:

栈      |    向低地址扩展                                   局部变量,函数参数值。
堆      |    向高地址扩展                                   动态申请内存的变量 malloc()free()
.bss    |    未初始化数据段                                 未初始化的全局变量
.data   |    初始化数据段                                   初始化的全局变量 ,静态变量 ,常数等
.code   |    代码段                                         常量 、程序代码


3.变量存储方式
变量存储方式分为静态存储方式和动态存储方式两种
 在C语言中变量的存储类型分为4中
:auto 自动变量
:static 静态变量
:register 寄存器变量
:extern 外部变量
自动变量和寄存器变量属于动态存储方式 外部变量和静态变量属于静态存储方式。
变量的完整形式为:存储类型 数据类型 变量名 

auto    : 函数内部未加存储类型说明的默认为auto ,可省略不写 ,默认类型均为auto自动变量。
static  :静态局部变量限制在本函数内使用,若静态局部变量未赋初值则系统自动赋予0值。
        :静态全局变量 限制在本文件实用 ,未加global修饰的全局变量可在本工程的其他文件中实用。
register:尽量申请变量放在寄存器中,加快效率。
extern  : 表示该变量在其他(外部)文件中定义过。

 关于static大家要注意这几点:

a.  static修饰变量。在修饰全局变量的时候,作用于限定于被定义的文件中,使用extern也不能访问; 在修饰局部变量的时候,在函数体中定义,只能用于该函数,即使使用该函数结束,静态变量也不会被销毁,下次可以继续使用,即缩小了访问范围但是延长了访问时间。

b. 修饰函数的时候,函数的作用于仅限于本文件,故也叫内部函数,和修饰全局变量类似。这就是为什么linux内核中所有的函数和全局变量都声明为static的原因,linux内核代码很多,有几万个文件,为了防止文件中的函数重名造成冲突,所以就干脆声明为静态的。

c.  Static修饰的静态变量,一次定义多次使用,值具有继承性(可以被修改),静态区BSS段中,初始值为0,修饰全局变量也一样,未初始化时,初始值为0;为在栈区,即局部变量中,未初始化的变量,初始值全部都是随机的脏数据。

阅读(1499) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~