动态或静态的的全局变量问题
在网上看到全局变量分动态和静态,动态全局变量作用域是整个源程序,而静态全局变量的作用域是定义了该变量的源文件,还说明,在全局变量定义之前冠以static即为静态全局变量,...
在网上看到全局变量分动态和静态,动态全局变量作用域是整个源程序,而静态全局变量的作用域是定义了该变量的源文件,还说明,在全局变量定义之前冠以static即为静态全局变量,那么如果多个文件使用了static修饰了同名变量,那么他们是不是共用一个变量。对于动态的全局变量,那么怎样才算是动态全局变量呢?定义在源文件函数体制外的变量算什么呢?用了extern声明了的不就是动态全局变量吗?为什么作用域只限定在存在全局变量梁声明的源文件当中使用?还有怎样才算是变量的初始化呢?先定义后赋值,还是定义的同时赋值?(因为我看到有程序将定义好的变量赋值叫初始化,难道就因为是第一次赋值所以叫初始化?)
展开
3个回答
展开全部
多个文件使用了static修饰的同名变量,并不是共用一个变量,楼主去看看static在变量前和函数前的作用吧。你自己说了(静态全局变量的作用域是定义了该变量的源文件),也就是该源文件是独享自己的静态全局变量的,相当于源文件隐藏这个静态全局变量(只自己能看见)。文件之间互不能看到对方的静态全局变量,所以不影响的。但是全局变量因为没有static,所以其他文件也是可以看见的,即例如A文件声明了一个全局变量,B文件就不能声明同名的全局变量。extern的作用你也应该去了解下,例如你在A模块声明了全局变量int a;B模块要使用就用extern int a;不然B模块你再用直接int a;会报错(认为你再次声明同名了)。这句(为什么作用域只限定在存在全局变量声明的源文件当中使用?)没懂,作用域就是使用范围,局部变量都有自己的作用域呀,你申请了一个变量(分配内存),作用域范围内使用完了就释放内存(不断申请内存而不释放内存是很恐怖的,毕竟内存有限)。 变量先是声明比如int x;但是这时不可用因为没有初始化(这时x的值是不可预料的)。所以你后面使用时赋值也是可以的,就是不能直接定义然后直接就使用(例如in x; printf("%d",x);)。你也可以定义的同时直接初始化,例如int x=0;(我们一般都习惯初始化为零,个人认为不为零没什么关系,反正后面使用时会给x赋值。) 本人也是菜鸟,辛苦这么久给点财富值吧,哈哈
Storm代理
2023-07-25 广告
2023-07-25 广告
StormProxies是一家提供动态代理服务器服务的企业,旨在帮助用户更好地管理网络访问和安全。以下是一些关于StormProxies的IP动态代理服务的特点:1. 高匿名性:StormProxies的动态代理服务器具有高匿名性,可以有效...
点击进入详情页
本回答由Storm代理提供
展开全部
哪里有动态全局变量,全局变量都是静态的,在程序导入内存的时候就导入内存了。。。动态变量就是动态变量,用malloc申请的,谁都能用,static只是声明该函数或变量为内部的,用于函数体内的变量,编译器在外部文件查找函数时会跳过有static的同名函数和变量,表示为静态变量,非自动变量。。。
extern声明的是我用的变量,是别的文件里的,所以碰到extern不能申请内存,而是连接时从其他文件中找该函数或变量的地址。。。。
静态变量,随程序一起导入内存,全局变量,只要是函数体外的都是全局变量,生存期和程序代码一样。。
全局变量都是静态的,随程序导入内存,只要,生存期和程序代码一样。。
动态变量, 程序使用过程中向系统申请的新存储空间,也随时可以让系统收回,所以叫动态变量。。。
自动变量,在堆栈中,随程序出栈入栈而产生和消失的,想弄明白这个可以研究计算机原理,啥叫堆栈。。。。
我写ARM移植程序,数据从flash导入内存,步奏就是先代码,再全局(静态),再预留内存(这个区没有定义变量,相当于自动变量,具体怎么用你自己安排,也可以没有),最后是堆栈区,自动变量使用的存储区。。。这些完成之后才轮到调用main函数。。。你别看全局变量写的靠前,导入内存所有全局变量都在函数代码的后面。。。
extern声明的是我用的变量,是别的文件里的,所以碰到extern不能申请内存,而是连接时从其他文件中找该函数或变量的地址。。。。
静态变量,随程序一起导入内存,全局变量,只要是函数体外的都是全局变量,生存期和程序代码一样。。
全局变量都是静态的,随程序导入内存,只要,生存期和程序代码一样。。
动态变量, 程序使用过程中向系统申请的新存储空间,也随时可以让系统收回,所以叫动态变量。。。
自动变量,在堆栈中,随程序出栈入栈而产生和消失的,想弄明白这个可以研究计算机原理,啥叫堆栈。。。。
我写ARM移植程序,数据从flash导入内存,步奏就是先代码,再全局(静态),再预留内存(这个区没有定义变量,相当于自动变量,具体怎么用你自己安排,也可以没有),最后是堆栈区,自动变量使用的存储区。。。这些完成之后才轮到调用main函数。。。你别看全局变量写的靠前,导入内存所有全局变量都在函数代码的后面。。。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
没有“动态全局变量”之说,只有external global object(外部全局对象)
只有把一个程序分成多个源文件(多个.c或.cpp文件,多个.h文件用#include 包含到一起的算一个文件)编译的时候 external 和 static 才有意义,否则看不出差别
只有把一个程序分成多个源文件(多个.c或.cpp文件,多个.h文件用#include 包含到一起的算一个文件)编译的时候 external 和 static 才有意义,否则看不出差别
追问
那就叫非静态全局变量好了,书上是说非静态全局变量的作用域是整个源程序,如果在a.c中有定义,那么在b.c中就不能再出现相同的定义,但是b.c中如果要使用的话必须用extern声明或static声明,那么非静态变量的作用域为整个源程序算不算是多此一举呢?
追答
写C代码大概不是很容易体现,C++程序员大概都会用到cin和cout,二者都是外部对象
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询