C++中的全局变量、普通局部变量和静态局部变量的区别

在C++中,我们经常难以说清楚全局变量、局部变量和静态局部变量的区别。本博客从变量存储特性和标识符作用域两个角度区分这三个变量。

首先,我们来看看C++程序的内存区域是如何分配的。

从上图,我们可以看到,C++程序的内存区域分为代码区、全局数据区、堆区和栈区。其中,全局变量和静态局部变量存放在全局数据区,这两个变量在程序开始时就已经分配和初始化存储空间了。而普通局部变量存放在栈区,它在程序进入声明的代码块时生成,在结束代码块时删除。

其次,从标识符作用域的角度,我们可以认为:

1. 全局变量和静态局部变量具有文件作用域

2. 普通局部变量具有函数作用域或者块作用域

时间: 2024-10-21 06:46:55

C++中的全局变量、普通局部变量和静态局部变量的区别的相关文章

Java基础——成员变量、局部变量和静态变量的区别

之前在刚开始学习Java的时候,就谈了谈Java基础中的变量,虽然知道这货以后会经常用到,但没想到了基本语法这里,竟然有冒出来了成员变量.局部变量和静态变量.变来变去太容易让人搞晕了,挑拣出来梳理一下喽! 要想区分这哥仨,首先,我们得知道它们分别是什么.先从成员变量下刀. 成员变量 我们来研究一个事物: 属性:外在特征:例如人的身高,体重 行为:能够做什么:例如人有说话,打球等行为. 而在Java语言中,最基本的单位是类,类就是用来体现事物的. 用类class来描述事物也是如此: 属性:对应类中

路由器中pppoe,动态IP,静态IP的区别

路由器中pppoe,动态IP,静态IP的区别 要把路由器设置得能上网,无非就是设置WAN外网接口连接而已.WAN接口能上网,则连接的电脑就能上网,反之则上不了网.只不过WAN接口往往有pppoe,动态IP,静态IP三种连接方式,一般的用户搞不清楚有什么区别.且听我慢慢道来…… 第一种:PPPOE模式可以说是最常用的了,无论是从电信联通那里拉来的ADSL宽带,还是接小区的网络,用的都是PPPOE协议.因为他们都会给你一个宽带账号和密码,输入账号密码连接就可以上网了.这就要用PPPOE模式,要不然都

C语言 全局变量、静态全局变量、局部变量、静态局部变量

1 //test.c 2 3 #include <stdio.h> 4 extern int global_var; 5 6 void test_global_var() 7 { 8 global_var++; 9 printf("global_var = %d\n", global_var); 10 } 1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4

成员变量、局部变量、静态变量的区别及

成员变量在堆区,因为成员属于对象的一部分,而对象分配在对中 局部变量分配在占中,对象的引用也分配在栈中 静态变量分配在方法区的静态区中 1:成员变量和局部变量的区别 (1)在类中的位置不同 成员变量:类中方法外 局部变量:方法定义中或者方法声明上 (2)在内存中的位置不同 成员变量:在堆中 局部变量:在栈中 (3)生命周期不同 成员变量:随着对象的创建而存在,随着对象的消失而消失 局部变量:随着方法的调用而存在,随着方法的调用完毕而消失 (4)初始化值不同 成员变量:有默认值 局部变量:没有默认

局部变量 静态局部变量 全局变量与静态局部变量

基本概念: 作用域:起作用的区域,也就是可以工作的范围. 代码块:所谓代码块,就是用{}括起来的一段代码. 数据段:数据段存的是数,像全局变量就是存在数据段的 代码段:存的是程序代码,一般是只读的. 栈(stack):先进后出.C语言中局部变量就分配在栈中. 局部变量 普通的局部变量定义的时候直接定义或者在前面加上auto void func1(void){ int i = 1;  i++;  printf("i = %d.\n", i);}局部变量i的解析:在连续三次调用func1中

C零基础视频-44-静态局部变量、静态全局变量、静态函数

目录 static关键字 静态局部变量 静态全局变量 静态函数 static关键字 C语言中的static关键字,有多种用于,它可以用来修饰局部变量.全局变量和函数,分别得到静态局部变量.静态全局变量和静态函数. 静态局部变量 使用static修饰局部变量,就得到静态局部变量: static int nValue = 0; 静态局部变量的特点: 只初始化一次 仅在定义的函数内可以使用 void FunTest() { static int nValue = 0; nValue++; printf

oracle监听器动态注册于静态注册的区别

即静态注册,listener不知道实例的状态,只有在进程通过其连接数据库时才能知道,如果你想使用远程管理数据库就使用静态监听动态注册:listener实时的都知道实例的状态,数据库在关闭的时候会动态的从listener中注销,所以远程管理数据库的启动和停止就不行了. 4,如何判断是静态注册还是动态注册(1) 可以通过配置文件判断 动态注册 SID_LIST_LISTENER =(SID_LIST =(SID_DESC =(PROGRAM = extproc)(SID_NAME = PLSExtP

C语言中全局变量、局部变量、静态全局变量、静态局部变量的区别 (转)

1.C++变量根据定义的位置的不同的生命周期,具有不同的作用域,作用域可分为6种: 全局作用域,局部作用域,语句作用域,类作用域,命名空间作用域和文件作用域. 从作用域看: 1>全局变量具有全局作用域.全局变量只需在一个源文件中定义,就可以作用于所有的源文件.当然,其他不包含全局变量定义的源文件需要用extern 关键字再次声明这个全局变量. 2>静态局部变量具有局部作用域,它只被初始化一次,自从第一次被初始化直到程序运行结束都一直存在,它和全局变量的区别在于全局变量对所有的函数都是可见的,而

C/C++语言变量问题(全局变量、局部变量、静态全局变量、静态局部变量)

1.C/C++变量根据定义的位置的不同的生命周期,具有不同的作用域,作用域可分为6种: 全局作用域,局部作用域,语句作用域,类作用域,命名空间作用域和文件作用域. 从作用域看: 1>全局变量具有全局作用域.全局变量只需在一个源文件中定义,就可以作用于所有的源文件.当然,其他不包含全局变量定义的源文件需要用extern 关键字再次声明这个全局变量. 2>静态局部变量具有局部作用域,它只被初始化一次,自从第一次被初始化直到程序运行结束都一直存在,它和全局变量的区别在于全局变量对所有的函数都是可见的