欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

C语言-变量生存期及作用域

发布时间:2025/6/17 42 豆豆
生活随笔 收集整理的这篇文章主要介绍了 C语言-变量生存期及作用域 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

目录

  • 1 变量的生存期和作用域
  • 2 默认初始化规则(C++11)

1 变量的生存期和作用域

  • 变量的储存方式:动态储存(自动、寄存器)、静态储存(静态和外部)
储存方式名称
自动变量anto
寄存器变量register
静态储存static
外部变量extern
  • 基本类型的静态变量(static)系统初始值为 0,全局变量也会自动初始化0
  • extern声明外部变量时,类型名可以写也可以不写,如extern int A,B,C,也可以写成extern A,B,C,因为它不是定义变量,可以不指定类型,只需写出外部变量名即可。
  • 若希望某些外部变量只限于本文件引用,而不能被其他文件引用,可以在定义外部变量时加一个static声明,如static int A;,那么在其他文件引用extern A就会报错。
  • 对局部变量声明static,作用是把它分配在静态内存,它在整个程序执行过程中不会被释放。对全局变量声明static,则限定该变量作用域只限于本文件。
  • 若要求函数只能被本文件内调用,称为内部函数,在定义内部函数时,加上static即可。
  • 若要定义外部函数,加上extern即可,但C语言默认不加static的就会外部函数,可以被其他文件调用。
  • Stack (栈内存):主要是用来存储 function calls(函数调用)和 local variables(局部变量) 的空间,其本质就是一个 Stack(栈)。最底层的便是 main() 函数,每调用一个函数时就会执行 push 操作,每当函数 return 时便执行 pop 操作。什么时候 main() 也被 pop 了,整个程序也就结束了。(如果这个 stack 变得太高以至于超出了最大内存地址,就会出现所谓的 stackoverflow

  • HEAP(堆内存):主要是用来存储由 malloc() 等申请的内存位置。如果 malloc() 返回 null 的话就往往表示这一块空间已经用完了。

  • Static (静态内存):这里的变量的生命周期与整个程序相同,即在进程创建是被申明,在程序退出时被销毁。global variables(全局作用域变量), file scope variables(文件作用域变量)和被 static 关键字修饰的变量会存在这里。

2 默认初始化规则(C++11)

  • 栈中的变量(函数体中的自动变量)和堆中的变量(动态内存)会保有不确定的值;
  • 全局变量(静态内存)和静态变量(包括局部静态变量,静态内存)会初始化为零。

C++11: If no initializer is specified for an object, the object is default-initialized; if no initialization is performed, an object with automatic or dynamic storage duration has indeterminate value. Note: Objects with static or thread storage duration are zero-initialized, see 3.6.2.

总结

以上是生活随笔为你收集整理的C语言-变量生存期及作用域的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。