C语言学习笔记-变量存储
-
怎样确定常量的类型呢?从常量的表示形式既可以判定其类型,举例来说:只要看到由单撇号括起来的单个字符或转义字符就是字符常量。也可以在常量的末尾加专用字符,强制指定常量的类型。
-
从变量的作用域(即从空间)的角度来观察,变量可以分为全局变量和局部变量
-
变量的存储有两种不同的方式:静态存储方式和动态存储方式
-
在动态存储区中存放以下数据:
- 函数形式参数。在调用函数时给形参分配存储空间
- 函数中定义的没有用关键字
static
声明的变量 - 函数调用时的现场保护和返回地址等
-
C语言存储类别包括4种:自动的(auto),静态的(static),寄存器的(register),外部的(extern)。根据变量的存储类别,可以知道变量的作用域和生存期
-
局部变量的存储类别
-
自动变量(auto变量)。函数中的局部变量,如果不专门声明为static存储类别,都是动态的分配存储空间的,数据存储在动态存储区中。函数中的形参和在函数中定义的局部变量都属于此类。
-
静态局部变量(static局部变量)。特点:如果在定义局部变量时不赋初值的话,则对静态局部变量来说,编译时自动赋初值0或空字符
\0
。虽然静态局部变量在函数调用时结束后仍然存在(表明它可以只被赋值一次),但其它函数是不能引用它的。用static声明一个变量的作用:①对局部变量用static声明,把它分配在静态存储区中,该变量在整个程序执行期间不释放。②对全局变量用static声明,则该变量的作用域只限于本文件模块
-
寄存器变量(register变量)。有些时候我们不需要显式的将变量指定为register,因为优化后的编译系统能够自动为一些经常使用的局部变量指定为register变量。
-
-
全局变量的存储类别
-
扩展全局变量的使用范围可以用extern,比如在变量未声明前使用变量,或者在一个文件中使用另一个文件定义的全局变量:
#include<stdio.h> int main() { extern A, B, C; // 也可以写成 extern int A, B, C; 注意这样写并不代表是在声明3个变量 scanf("%d %d %d", &A, &B, &C); return 0; } int A, B, C; int print() { printf("%d %d %d\n", A, B, C); }
如果要限定声明的全局变量只能在本文件使用,则要在全局变量加上static。
-
-
声明和定义:把建立存储空间的声明称为定义,而把不需要建立存储空间的声明称为声明
-
根据函数能否被其它源文件调用,将函数区分为内部函数和外部函数