文章目录
作用域与生存期
·作用域与生存期每个变量都有。
·作用域以空间角度看待变量(可见性),生存期从时间角度看待变量(存在性)。
·生存期>=作用域
变量的作用域
局部变量定义:在函数内部定义或在函数内部的复合语句中定义的变量。
全局变量定义:在函数外部定义的变量。
局部变量
·不同函数中可使用同名变量。
·函数的形式参数为局部变量。
·作用域仅在该函数或复合语句中,离开后内存立即释放。
全局变量
·作用域:从定义开始到本源文件结束。
·若全局变量与局部变量同名,在局部变量的作用范围内,全局变量会被屏蔽,不起作用,而局部变量有效。此时加上::(双冒号)表示使用全局变量。
·想要在定义点之前引用该全局变量,使用extern修饰声明来扩展作用域,同样可以用它来把作用域扩大到别的文件。由于只是声明而不是定义,可以不指定类型。
·用static修饰全局变量(静态外部变量):该变量作用域只限于本文件模块。
变量的生存期
静态变量:在静态存储区内分配内存单元,整个程序运行期间都不释放。
动态变量:在动态存储区内分配内存单元,调用结束时自动释放。
局部变量
自动变量(用auto修饰,可省略)
·局部变量如果不作特殊说明都默认为auto类型。调用结束时立刻释放。
寄存器变量(用register修饰)
·存储于CPU的寄存器中。同样是调用结束后立刻释放。
静态局部变量(用static修饰)
·生存期:从程序开始到程序结束。
·分配的空间始终存在不释放。
·调用结束后仍然存在,但其他函数无法引用,因为它是一个局部变量。
全局变量
·生存期:从程序开始到程序结束。要与作用域分开(作用域:从定义开始到程序结束)。
·全局变量全都放在静态存储区中,全局变量必然是静态变量。
函数
·声明函数时使用static修饰:函数的作用域局限于所在文件。
·定义函数时用extern修饰:可供其他文件调用。(默认为extern)
注意事项
·static对局部变量和全局变量的作用是不一样的。
·对一个变量定义,明确其数据类型和储存类别。
·对变量而言,extern用在声明中。