C语言学习笔记:定义,声明,初始化

一、变量的定义与声明
变量的声明包含两种情况:
1.一种是需要建立存储空间的,即定义。例如:int a; 在声明的时候就已经建立了存储空间。
2.另一种是不需要建立存储空间的。 例如:extern int a; 其中变量a是在别的文件中定义的。
因此,从广义上来讲,声明包含了定义,定义是声明的一种特殊情况。从狭义上来讲,即我们平时说的,定义时分配内存,而声明是不分配内存的。
其实,定义与声明的区别主要主要体现在外部变量上,如:

file1.c

int sp = 0;
double val[MAXVAL];

file2.c

extern int sp;
extern double val[];

void fun_1() {...}
double fun_2() {...}

在一个源程序的所有源文件中,一个外部变量只能在某个文件中定义一次,而其他文件可以通过extern声明来访问它。外部变量的定义中必须指定数组的长度,因为要分配存储空间,但extern声明则不一定要指定数组的长度。外部变量的初始化只能出现在其定义中。

二、函数的定义与声明
函数的定义与声明就很好理解了
1.声明:函数的声明向编译器提供该函数的相关信息,用于确保函数被正确的调用。
2.定义:函数的定义就是函数体的实现。

三、初始化
对于外部变量与静态变量来说,初始化表达式必须是常量表达式,且只初始化一次。在不进行显式初始化时,将被初始化为0.
对于自动变量和寄存器变量,则在每次进入函数或程序块时初始化。在不进行显式初始化时,其初值没有定义(即初值为无用信息).

四、static
1.声明变量
a.局部变量:只能在某个特定函数中使用,但一直占据存储空间。
b.外部变量:将作用域限定在本文件中。
2.声明函数
静态函数只対该函数声明所在的文件可见。

五、作用域,链接属性及存储类型总结

变量类型 声明的位置 是否存在于堆栈 作用域 声明为static
全局 所有代码块之外 从声明处到结尾 不允许从其他源文件访问
局部 代码块起始处 整个代码块 变量不存储于堆栈,它的值在程序整个执行期一直保持
形参 函数头部 整个函数 不允许


你可能感兴趣的:(C语言学习笔记:定义,声明,初始化)