C 学习笔记 —— 声明、定义、初始化

声明

说明符+表达式列表

int a;
char j, k l;

定义

一般的情况下,我们把建立空间的声明称之为定义,而把不需要建立存储空间的声明称之为声明。

int tern = 1; //定义

int main() {
    
    
	int a; //也是定义,因为建立了存储空间
	extern int tern; // 声明定义在别处的变量,仅仅是声明,没有建立空间
}

tern被声明了两次,
第一次声明为变量预留了存储空间构成了定义。称为定义式声明。
第二次声明只是使用之前的变量,而没有创建空间所以仅仅是声明。

extern关键字只能做声明,不能定义。

初始化

变量的初始化: 为变量声明或者定义之后,赋上初值的过程,就是变量的初始化。

定义和初始化的区别

int a; //只是定义也是声明,但是并没有给初始值,所以不是初始化。
int a = 4; //既是定义又是初始化。
extern int a; //仅仅是声明。

当然定义和初始化也可以分开

int b; //声明/定义 变量
b = 2//初始化变量

静态变量初始化

静态变量默认将值初始化为0。
可执行程序载入到内存时,已经保存了正确值的位置,会将值赋值给变量。
完成这个任务不需要额外的时间与指令,静态变量就会初始化完成。

自动变量初始化

自动变量不会被初始化为0.
程序在链接时还无法判断自动变量的存储位置,因为局部变量可能在函数中每次调用时占据不同位置。所以自动变量会使用更多开销。

  1. 自动变量的初始化和声明然后赋值,效率一样,无差别。
  2. 静态变量每次只在程序执行时初始化一次,而自动变量在每次执行到所在函数时都会进行一次初始化。
  3. 因为自动变量初始化在运行时才执行,你可以用变量给他初始化, 而静态变量不能使用变量来初始化 。
    int a = 4;
    int b = a + 3;
    //static int c = a + 4; 编译报错
    
  4. 建议对自动变量初始化,或者保证使用前赋值,不然他会有一个垃圾值是非预期的。

猜你喜欢

转载自blog.csdn.net/chongbin007/article/details/129034719