【C++ 学习】链接、作用域、内存管理

编程入门 行业动态 更新时间:2024-10-19 02:20:12

【C++ 学习】链接、作用域、<a href=https://www.elefans.com/category/jswz/34/1766335.html style=内存管理"/>

【C++ 学习】链接、作用域、内存管理

链接、作用域、内存管理

存储类别

int num = 3;

该声明创建了一个名为num的变量,变量值为3,num是这个变量的名字,也就是标识符。标识符是一个名称,一个合法的标识符必须以字母或者下划线(_)开头,其组成可以由字母,下划线和数字组成。
num变量是一个存储在内存中的变量。也就是说,num在内存中实际占用一定的物理内存,C语言把这样一块内存称为对象。
存储期:是指对象在内存中保留了多长时间。(即这块内存的可使用时长)。
标识符可以用来访问这样一个内存,可以用作用域、链接描述标识符,标识符的作用域和链接表明了程序的哪些部分可以使用它。

作用域

作用域用来描述程序中可以访问某个标识符的区域。
作用域的大小包括块作用域、函数作用域、函数原型作用域和文件作用域。

for (int i; i < 15; i ++){int n = 10;...;...;
}

在for循环中,i的作用域就是块作用域,变量n的作用域也是块作用域,即在这个块中,i和n是可用的,在这个块外面,如果再存在i或n,则两者是不同的。while块、do while块、if和else语句块都是块作用域。
函数作用域仅用于goto语句。
函数原型作用域的范围是从形参定义处到原型声明结束。

int add(int a, int b);

这就是一个函数声明。
文件作用域,变量定义在文件开头(也不一定非得在开头,不过一般都写在开头)并在所有函数的外面。

#include <iostream>
int count = 0;
int main(void){...;
}

这里面的count变量就是文件作用域变量,即count可以在所有函数中使用。文件作用域变量也成为全局变量
局部变量: 块作用域的变量,函数原型作用域变量,函数作用域变量都是局部变量。这意味着,这些变量只能在指定区域使用。但是,如果全局变量与局部变量重名,且在该块中存在一个同名局部变量,块优先使用局部变量。

#include <iostream>using namespace std;int count = 0;int main(void){count ++;cout<< "count = " << count << endl;example();cout<< "count = " << count << endl;return 0;
}
voud example(void){int count = 15;cout << "example count = " << count <<endl;
}

开头的count = 0,就是一个全局变量,example函数中count = 15,就是一个局部变量。

链接

C变量具有3种链接属性:外部链接、内部链接和无链接。
== 具有块作用域、函数作用域、函数原型作用域的变量(局部变量)都是无链接变量。==

具有文件作用域(全局变量)可以是外部链接或内部链接。

存储期

存储期描述了通过这些标识符访问的对象的生命期。 C对象共有四种存储周期:静态存储期、线程存储期、自动存储期和动态分配存储期。
静态存储期的存储时间最长,如果某一个变量具有静态存储期,则它在程序的执行期间会一直存在。文件作用域的变量(全局变量)具有静态存储周期。
线程存储期、自动存储期、动态分配存储期一般都不具有全局的生命周期(除非使用static限定的变量),它们是随着线程、块、动态空间分配函数的分配作用域来决定的。

静态变量

简单地来说就是使用static进行限定的变量和全局变量。静态的意思是,该变量一经声明定义(静态变量声明的同时必须进行定义)在内存中拥有一块存储区域后,就会一直在该块内存中,直到程序执行结束。其变量值可以改变,但是物理内存不会改变。
函数中声明定义的静态变量,具有静态存储周期,但是作用域仅是块作用域,不是全局作用域。也就是说,函数执行结束后,该变量的内存不会被释放,但其他函数也无法使用该变量

更多推荐

【C++ 学习】链接、作用域、内存管理

本文发布于:2023-12-04 20:02:08,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1662065.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:内存管理   作用   链接

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!