2、基础 | C++ 变量

1. 全局变量与 static 变量(作用域、生存周期)

全局变量

  • 作用域:全局变量的作用域从它被定义的地方开始,一直到程序结束。在定义它的文件内部以及通过 extern 关键字在其他文件中都可以访问。
  • 生存周期:全局变量的生存周期贯穿整个程序执行期间,从程序开始执行到程序结束。

static 变量(在函数外部定义的)

  • 作用域static 变量具有文件作用域,即它只在定义它的文件内部可见,其他文件即使通过 extern 也不能访问。
  • 生存周期:与全局变量相同,static 变量的生存周期也是贯穿整个程序执行期间,从程序开始执行到程序结束。但是,由于它的作用域限制,它只能在定义它的文件内部被访问和修改。

2. static 函数与普通函数的区别

  • 作用域static 函数具有文件作用域,即它只能在定义它的文件内部被调用。而普通函数(非static)则可以在整个程序中通过函数原型声明后,在任何文件中被调用(只要包含了相应的头文件或声明)。
  • 链接性static 函数具有内部链接性(internal linkage),这意味着编译器只为该函数生成一份代码,且该代码仅在该文件内部可见。而普通函数具有外部链接性(external linkage),编译器会为每个调用该函数的文件生成一份指向该函数代码的指针(或类似的机制),以便在链接时解析函数调用。
  • 使用场景static 函数常用于隐藏函数实现细节,减少命名冲突,或当函数只在定义它的文件内部使用时。普通函数则用于实现需要在多个文件中共享的功能。

3. 两个文件中声明两个同名变量?(使用了与未使用 extern?)

在C++中,如果两个文件中声明了同名的全局变量,并且没有使用extern关键字来明确指定它们之间的链接关系,那么这两个变量实际上是两个独立的变量,它们分别属于各自的文件作用域。

  • 未使用 extern:每个文件中的同名全局变量都是独立的,它们之间没有任何关系。每个变量只在定义它的文件内部可见和可访问。

  • 使用 extern:如果在一个文件中定义了全局变量(例如,在file1.cpp中定义了int x;),然后在另一个文件(file2.cpp)中想要访问这个变量,就需要在file2.cpp中使用extern关键字来声明这个变量(extern int x;)。这样,file2.cpp中的x就指向了file1.cpp中定义的那个全局变量,它们实际上是同一个变量。但是,需要注意的是,extern声明不能出现在函数内部,它必须位于所有函数之外的全局作用域中。

总结来说,extern关键字用于在多个文件中共享同一个全局变量的声明,而如果不使用extern,则每个文件中的同名全局变量都是独立的。

4. 全局数组和局部数组的初始化

全局数组

  • 定义位置:全局数组是在函数外部定义的,即它们对整个程序可见。
  • 初始化
    • 如果没有显式初始化,全局数组(包括静态数组)的元素会自动初始化为0(对于基本数据类型,如int, float等)。这是因为全局变量和静态变量的存储区域在程序的数据段(data segment),未初始化的全局变量会被编译器自动初始化为0。
    • 如果显式初始化,则可以指定数组元素的具体值。
  • 生命周期:全局数组的生命周期贯穿整个程序执行期间,从程序开始执行到程序结束。

局部数组

  • 定义位置:局部数组是在函数内部定义的,其作用域限定在定义它的函数内部。
  • 初始化
    • 如果不显式初始化,局部数组不会自动初始化为0,它们的初始值是未定义的(即它们包含垃圾值)。
    • 如果显式初始化,可以指定数组元素的具体值,或者通过初始化列表进行部分或全部初始化。
  • 生命周期:局部数组的生命周期从它被定义时开始,到包含它的函数执行结束时结束。

5. 指针和引用的区别

代表意义

  • 指针:是一个变量,存储的是另一个变量的地址。指针可以指向任何类型的数据,包括数组、结构体、函数等。
  • 引用:是变量的别名,必须在声明时被初始化,且一旦与某个变量绑定后,就不能再改变为另一个变量的引用。

内存占用

  • 指针:占用内存空间,用于存储被指向变量的地址。指针的大小取决于系统架构(如32位系统下通常是4字节,64位系统下通常是8字节)。

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

C/C++面试必考必会 文章被收录于专栏

【C/C++面试必考必会】专栏,直击面试核心,精选C/C++及相关技术栈中面试官最爱的必考点!从基础语法到高级特性,从内存管理到多线程编程,再到算法与数据结构深度剖析,一网打尽。助你快速构建知识体系,轻松应对技术挑战。希望专栏能让你在面试中脱颖而出,成为技术岗的抢手人才。

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务