- 肖振
-
1、静态方法和静态变量在编译阶段分配好的,动态方法和动态变量是在运行阶段才分配内存的,就这点区别。
2、成员变量保存在堆(数据段)内。只有函数的参数才保存在栈里面,因为每次调用函数都需要逐个数参数(进栈和出栈)
- 瑞瑞爱吃桃
-
堆,向下分配内存(new,malloc等)
-----------------------------------
浮动栈,向上分配内存(函数内部变量,对象的内部成员变量等.一般都有生命周期)
-----------------------------------
基栈.(也叫静态存储区,包括代码段,静态变量,全局变量,const常量等,程序一调入内存至少要占这么多空间)
c++中静态变量和动态变量有什么区别
补充一点:动态变量如果不赋初值,其初值是不确定的,静态变量如果不赋初值,会被初始化为02023-06-06 10:53:402
C++中能在结构体中定义静态变量吗?
结构是用struct定义的特殊的类,在class中能够定义静态变量,在结构中也是可以的。2023-06-06 10:53:486
C++静态变量作用范围问题
在remote_access()函数中输出的dick是twofile2.cpp中定义的dick=10,而twoflie1.cpp中输出的dick是本文件中定义的dick=30,两者自然不同;同理在remote_access()函数中输出的harry是twofile2.cpp中定义的harry=200,而twoflie1.cpp中输出的harry是本文件中定义的harry=300,两者也不同。2023-06-06 10:54:021
c++静态变量和动态变量(有动态变量吗)最主要的区别是什么?
主要区别在于存储持续性和文件链接两方面,静态变量存在于整个程序过程,动态变量是局部可用。静态变量是外部链接性,其它文件也可以引用,动态变量只是局部可以使用2023-06-06 10:54:081
C++静态变量如何声明?
变量名字前加上修饰词 static,例如static int a;2023-06-06 10:54:153
C++ 静态变量之为什么只初始化一次
首先问题来自这个函数:[cpp]int fun(){static int i=0;i++;return i;}当这个函数被反复调用时,i的值是会一直加的,也就是静态变量只被初始化了一次.我对此产生了疑惑.不知道大家有没有.当改为:[cpp]int fun(){int i=0;i++;return i;}反复调用时都返回的是1; 这个例子很明白,虽然i这个变量时同名的,但是地址是不一样的,这是一个新的变量,因为在作用域后,原变量被销毁了.接着创建一个新的变量.那么这里我们就知道了一件事情:就是静态变量是全局的,和程序的生命周期是一样的.那么原来的staic的i依然存在. 但是它的可访问区域就只能是定义的作用域,而不一定能全局访问,这是全局变量的一个差别.而静态变量的必须初始化,如果没有显示初始化,则初始化为0 ,"0"或者其他.初始化在程序第一次加载中开始.并设置了相应的标志位!所以当变量重复时,编译器忽略了重复初始化的代码,到这里就算是C++只能初始化一次的原因了!另外参考:操作系统在加载程序时会根据程序中的声明部分为程序分配内存空间(这部分数据是由编译器生成的)。程序所支配的内存空间分为两大部分:静态区域和动态区域(至于为什么这样区分涉及到硬件知识,建议LZ不要深究):动态区域用于存储经常会变动的数据(动态区域又分为两大部分:栈和堆,关于这两个部分大家应该都很熟悉了);静态区域(Java里称为永久区域)用于存储不会经常变化的数据,例如程序的指令代码(C/C++里就是各个函数编译后得到的代码)、用户类型(结构体、类)的声明代码、全局变量、静态变量PS:有些例子提到用静态变量来做递归的计数器,那只是为了说明静态变量的特性。实际上不推荐这种用法,因为这样会对程序性能造成轻微的影响。静态区域内的数据会在程序加载时进行初始化,生存期为程序运行的全部时间。另外,纠正LZ的一个误解:任何变量都只进行一次初始化。局部变量在程序块结束时生存期就结束了,下次再调用这个程序块时从原理上说声明的是另一个变量了(分配到的地址也不一定一样)。PS:在不同编译器的不同编译情况时,实际的内存分区可能不同。例如TC的Small模式下堆和栈区是重合的,而Tiny模式下连静态区域和动态区域都是重合的。2023-06-06 10:54:342
在线等,c++关于静态变量的问题
因为你的other函数在main中调用了两次,而other函数中的a变量是静态类型的,静态类型的变量保存值有个条件是函数调用的连续性,就是调用过程没有中断,而你的两次调用没有连续性。所以,第一次时a为2,然后程序中加了一个2,再次调用时,a又还原了。2023-06-06 10:54:483
c++构造函数中的静态变量
不明白!2023-06-06 10:54:554
C++中静态局部变量的生存期是什么?是贯穿整个程序还是从调用该函数开始到整个程序结束?
在程序结束前,他一直存在!在函数的多次调用中,静态的局部对象会持续存在并保存他的值!例如:int fun(){ static int coutnt = 0; return ++count;}int main(){ fun(); fun(); cout << fun() << endl;结果会输出3}2023-06-06 10:55:273
C++静态成员变量的问题,找错误
空间环境和2023-06-06 10:55:343
static在c++中的作用
一、用作局部静态变量static类型局部变量存储在静态存储区,在程序整个运行期间都不释放。static局部变量只在所处模块初次运行时初始化一次。如果没有初始化语句,编译期会自动赋初值0或空字符,对象实例如果不初始化,则会自动调用默认构造函数二、用于外部静态变量/函数函数前加static使得函数成为静态函数,函数的作用域仅局限于本文件(所以又称内部函数)。全局变量加static限制, 限定作用域在本文件内部三、静态数据成员/成员函数表示属于一个类而不是属于此类的任何特定对象的变量和函数。比如在对某一个类的对象进行计数时, 计数生成多少个类的实例,就可以用到静态数据成员。静态成员函数被普通成员函数调用时, 需要传入this指针, static成员函数调用时, 没有this指针.2023-06-06 10:55:411
C++ 公有的 静态变量可以用类名::访问, 那么非静态变量是不是 就不能用类名::访问?
楼上两位正解2023-06-06 10:55:493
c++中怎样定义两个类去改变同一个静态变量
在其中一个类a中定义一个另一个类b的对象的数据成员(b x;),然后就可以用该类的对象访问列入 a c;然后c.x.y;y为b类的静态变量2023-06-06 10:55:561
C++语言静态变量递归,不懂求分析
静态变量只初始化一次,当本次使用结束后,下次使用时,继续保留上次调用结束后的值!2023-06-06 10:56:052
C++中; 静态变量与动态变量有什么区别啊? 作用是什么?
C++中变量存储方式有三种,自动存储,静态存储,动态存储自动存储简单意义上就是在函数内不用任何关键字直接定义的变量,它在函数被调用时被创建,在函数退出时自动消失,静态存储顾名思义就是在程序的整个运行过程中都存在,在函数体外定义的变量自动为静态存储方式,也可以在函数内使用static关键字定义动态存储是以关键字new和delete构成的,在程序运行过程中需要时通过new现场分配指定大小的空间,不再需要时使用delete来释放2023-06-06 10:56:231
c++中的常量和静态有什么区别?
"常量"在程序运行时,不会被修改的量。换言之,常量虽然是为了硬件、软件、编程语言服务,但是它并不是因为硬件、软件、编程语言而引入。 常量区分为不同的类型,如25、0、-8为整形常量,6.8、-7.89为实型常量,"a""b"为字符常量。常量一般从其字面形式即可判断。这种常量称为字面常量或直接常量。 静态变量的类型关键字是static。 静态变量当然是属于静态存储方式,但是属于静态存储方式的量不一定就是静态变量, 例如外部变量虽属于静态存储方式,但不一定是静态变量,必须由 static加以定义后才能成为静态外部变量,或称静态全局变量。 对于自动变量,它属于动态存储方式。 但是也可以用static定义它为静态自动变量,或称静态局部变量,从而成为静态存储方式。 由此看来,一个变量可由static进行再说明,并改变其原有的存储方式。2023-06-06 10:56:303
c++中静态空间可以修改吗
可以,比如:struct A { static int s_value;};但这里s_value只是一个变量声明,而不是变量定义,也就是说,只有上面一个结构体定义是不够的,因为你没有为s_value分配存储空间,这时候不能通过A::s_value来访问它。解决办法是:在某一个C++源文件中定义这个变量。定义语句很简单:int A::s_value = 0; //可以初始化为0,也可不初始化。因为是静态变量,所以是默认初始化为0的。注意:不能在头文件中定义。如果在头文件中定义,一旦头文件被多个源文件包含,编译时一定会报“重定义”而导致编译失败的。变量定义语句要放在所有函数的外面。如果同时使用了namespace,则定义时也要同时指明。例如://头文件里面声明namespace mycode { struct A{ static int s_value; };}//源文件里面定义int mycode::A::s_value = 0;2023-06-06 10:56:371
C++中; 静态变量与动态变量有什么区别啊? 作用是什么?
静态变量相当于C中的全局变量,动态变量是局部变量。2023-06-06 10:56:442
C++ 类中静态变量能通过类名访问吗
可以,公有的静态变量外部可以直接使用类名::静态成员2023-06-06 10:56:511
c++中父类的静态成员变量在子类中的使用(急)
子类可共享。实现方式一:class A{public: static int a;};class B:public A{};可直接访问a。-----------------------实现方式二:class A{private: static int a;public: int get_a(){return a;} //读 void set_a(int b){a=b;} //写};class B: public A{};需要通过接口函数get_a()和get_b()访问静态变量a2023-06-06 10:57:093
c++里面静态变量和动态变量,自动变量这些都有哪些个区别
auto为动态变量 可省略,在c++中通常都不写auto,即未加属性说明的局部变量都为自动变量。当定义时,系统即在动态区为其分配存储单元。函数运行结束后释放它所占的存储单元;如果在定义时,不给自动变量赋初值,那每次调用时,其初值是不确定的;如果定义时赋初值,那每次调用时它都取定义时所指定的值。 static为局部静态变量所占存储单元在静态区,在调用它所在的函数后,在函数体内被修改了的静态变量的值被保留下来作为下次函数调用的初值起到全局变量的作用。 如果使用一个全局变量,又怕受到其它变量的干扰,于是就将其设计为静态变量2023-06-06 10:57:162
c++静态指针变量
1.静态数据成员需要在类外单独做初始化,形式如: 变量类型 类名::变量名=初始值;看下面的例子:(调试环境VS2005)class BaiduTest{public: static int *m_instance;//静态指针变量};int _tmain(int argc, _TCHAR* argv[]){ int a = 10; BaiduTest::m_instance = &a;//静态指针变量初始化 return 0; }2023-06-06 10:57:222
C++类的成员函数中创建静态变量会被类的所有对象共享么
是的,2023-06-06 10:57:304
在c++中, 如何区别应用宏和静态变量
所有的宏在被编译之前都会被其定义替换掉,就是说如果一个宏的定义是一串很长的代码,而且这个宏被多次使用,那么编译后将会使用该宏的定义替换掉那些使用宏的地方,所以就会出现很多重复的代码,这是很低效的。但是如果宏的定义比较简短,比如就是一个值,那么可以直接使用宏。 静态变量就不会有替换问题了,但是静态变量在运行的时候系统会在栈上为其分配内存,一直到程序结束才会被销毁。而且静态变量只能存储值,而不能定义操作,而宏的定义既可以是一个值,也可以是一系列操作。 如果一个值使用次数不多,或者希望执行一系列操作而又不想定义函数的话使用宏是不错的选择。 如果一个值使用次数比较频繁,则推荐使用静态变量。2023-06-06 10:57:361
C++中将一变量在一函数中定义为局部静态变量,可以再把这个变量在主函数中定义为动态变量吗?它的值在
主函数的动态变量会把主函数中对这个变量的访问都导向到主函数里的这个动态变量。所以不会出现两个的情况。如下代码:#include <stdio.h>void fun(){ static int i=8; printf("in fun () i=%d ",i);}intmain(void){ int i=9; printf("in main i=%d ",i); fun(); printf("after fun in main i=%d ",i); getchar(); return 0;}输出结果为in main i=9in fun () i=8after fun in main i=9可证明2023-06-06 10:58:582
关于c++静态变量,为什么以下程序输出的是321,654,而不是123,456?
C++中的数据流运算符>>和<<都是按照他的箭头方向进行输入和输出的,就是说<<是先从最右边的开始输出,>>是先从最左边的开始输入。而程序运行的顺序则都是从左往右的,所以输出是反过来的2023-06-06 10:59:263
C++局部静态变量的内存什么时候创建的
应该是程序一开始的时候。而且是在cpu内部创建,不是内存。2023-06-06 10:59:332
C++局部静态变量在什么时候分配内存和初始化
静态变量1.应该放在应用程序中,类以外的任何地方初始化,如:在main中,全局函数中,任何函数之外:2.不应该放在类的构造函数(构造函数可能多次被调用);头文件中(头文件可能被包含入多个地方,也可能被执行多次)。2023-06-06 10:59:402
C++中全局变量,局部变量,静态变量,new的变量分别在什么时候构造和析构
全局变量和静态变量差不多,都是程序刚开始就构造,程序结束析构,局部变量一般在某个函数中申明,执行函数时构造,函数退出析构,new的变量,什么时候new什么时候构造,用完后一般自己析构,想在哪儿在哪儿,如果不主动析构,那么程序结束会自己析构,但这样会有内存泄漏2023-06-06 10:59:471
C++中new出来的静态变量在内存的什么区
纠正一下,new出来的变量不是静态的2023-06-06 11:00:042
C++问题 请问内部静态变量的作用域是定义该静态变量的函数内部还是文件内部
文件2023-06-06 11:00:123
c++中的常量和静态有什么区别?
"常量"在程序运行时,不会被修改的量。换言之,常量虽然是为了硬件、软件、编程语言服务,但是它并不是因为硬件、软件、编程语言而引入。 常量区分为不同的类型,如25、0、-8为整形常量,6.8、-7.89为实型常量,"a""b"为字符常量。常量一般从其字面形式即可判断。这种常量称为字面常量或直接常量。 静态变量的类型关键字是static。静态变量当然是属于静态存储方式,但是属于静态存储方式的量不一定就是静态变量,例如外部变量虽属于静态存储方式,但不一定是静态变量,必须由static加以定义后才能成为静态外部变量,或称静态全局变量。对于自动变量,它属于动态存储方式。但是也可以用static定义它为静态自动变量,或称静态局部变量,从而成为静态存储方式。由此看来,一个变量可由static进行再说明,并改变其原有的存储方式。2023-06-06 11:00:181
C++内部静态变量的作用域?
详见以下:http://wenku.baidu.com/view/450875f90242a8956bece423.html2023-06-06 11:00:265
C++中局部静态变量是在什么时刻产生(分配内存)?在编译时,还是等运行到该变量的首次出现时?
在编译的时候就确定了2023-06-06 11:00:413
c/c++中,statics到底是什么意思?请分静态变量跟静态函数分别解释下 实在理解不清 心急啊
百度百科:http://baike.baidu.com/view/675642.htm我觉得解释地挺清楚。2023-06-06 11:00:483
C++ 一个含有静态全局变量的头文件被包含多次
你定义的静态变量是s,sig是什么?2023-06-06 11:00:553
C++中,如何访问类的静态成员!
1.静态成员函数中不能调用非静态成员。2.非静态成员函数中可以调用静态成员。因为静态成员属于类本身,在类的对象产生之前就已经存在了,所以在非静态成员函数中是可以调用静态成员的。3.静态成员变量使用前必须先初始化(如intMyClass::m_nNumber=0;),否则会在linker时出错。4.在类的非静态成员函数中使用类的静态成员classPoint{public:voidinit(){output();}staticvoidoutput(){}};voidmain(){Pointpt;pt.output();}5.使用类的静态成员变量#includeclassPoint{public:Point(){m_nPointCount++;}~Point(){m_nPointCount--;}staticvoidoutput(){printf("%d ",m_nPointCount);}private:staticintm_nPointCount;};intPoint::m_nPointCount=0;voidmain(){Pointpt;pt.output();}2023-06-06 11:01:022
C++局部静态变量的内存什么时候创建的
如果是局部的静态变量,是在第一次运行到这里时创建, 如果以后再运行到这里就不会再创建。2023-06-06 11:01:092
C++编程:在函数f中定义一个静态变量n,f中对n的值加1,主函数调用f10次,显示n的值
老夫帮你解答2023-06-06 11:01:296
C++静态变量和全局变量哪个先编译! 为什么?
那得看你先把谁压栈了..2023-06-06 11:01:456
C++中类的静态成员变量怎么实现在多个源文件中共享?
2.要在多个文件中共享类得成员变量怎么实现呢?包含静态成员变量定义的头文件即可2023-06-06 11:02:024
C++中声明如何实现束定?动态/静态?给个例子
动态变量和静态变量的问题?不知道你要问什么。。。如果是的话,主要区别是生命周期不一样,静态变量是和类的生命周期是一样的,如果在main函数定义的,则和整个程序的生命周期是一样的,只有退出程序的时候,静态变量也析构,而动态变量则跟定义他的地方联系,局部变量则局部周期结束的时候变量跟着析构。所以如果你想要只定义一次变量,而在一个循环中每次都要用到这个变量,而且变量保存的上一次循环的结果的话,这时候就要用到静态变量了,举个例子:#include<stdio.h>void main(){ int n=0; while(n<5) { static int sn=0; sn+=2; printf("静态变量的值为:%d ",sn); n++; }// printf("定义外输出静态变量:%d ",sn); //输出会报错,不可以在定义范围外引用 while(n>0) { int dn=0; dn+=2; printf("动态变量的值为:%d ",dn); n--; }}输出sn的值会一直增加 2 4 6 8 10,而dn的值一直是 2,这是因为sn只定义了一次,而且只初始化一次;而dn每次进入循环都定义一次,而且初始化为0。相同点是在定义变量作用域外使用变量的话都会报错。静态函数和类会有些不同,但是思想是一样的。2023-06-06 11:02:161
C++中new出来的静态变量在内存的什么区
局部static变量在程序运行的时候分配空间了,只不过作用域是局部的,生存期和全局变量一样到程序结束2023-06-06 11:02:231
关于C++中非局部静态变量和全局变量初始化的具体过程是怎样的
不是的。全局变量还是局部变量都可以初始化或者不初始化化 ,语法没有对这有要求。但是到实际情况是根据你写的代码来分析。你写的int total = 0;在你不初始化报错的原因是,int total; total是没有赋值的一个变量,那他的值就是分配内存中残留的值,属于错误的数据。你后面用到total+=num[j].一个错误的数据做操作就报错了,就算不报错,你得到的结果是不正确的。所以在你这个情况,赋值为0 。并不是语法规定。2023-06-06 11:02:291
一个关于C++全局变量的问题: 为什么在不同的源文件中访问一个头文件中定义的全局静态变量,地址不一样?
由于你定义的是全局静态变量,所以其适用范围有限制。在1.CPP定义的不能在其他地方使用。要想使用把静态去掉试下。2023-06-06 11:02:363
C++编程:在函数f中定义一个静态变量n,f中对n的值加1,主函数调用f10次,显示n的值
可不可以请问一下下,这个程序干嘛的?#include<iostream>using namespace std;void fn1();int main(){ int x,n;//初始化? for(x=1;x<=10;x++) fn1();//循环语句执行过程x有反应,n不参与的。 cout<<n<<endl; system("pause"); return 0;//要有返回值。 }void fn1(){ static int n=1; //你的n值传不出去。 n=n+1;}2023-06-06 11:02:573
c++里面,static int* a=new int(); a存放在内存的哪一块?堆?栈?还是静态变
new出来的 肯定是堆啊2023-06-06 11:03:144
c++怎样调用类的静态方法
直接用类名.方法名调用,比如有个类A,里面有个方法fun(),那就直接A.fun(),即使你实例化了一个类A比如说a,还是要用A.fun()而不是a.fun()2023-06-06 11:03:212
C++作业:用CDate定义表示储户信息的类,类中CDate作成员对象,显示储户相关信息,利率设为静态变量。
const int Days[]=;class CDate {public: CDate(int nYear, int nMonth, int nDay) :m_nYear(nYear), m_nMonth(nMonth), m_nDay(nDay){} virtual ~CDate(){}private: int m_nYear,m_nMonth,m_nDay; bool IsLeapYear() { if((m_nYear%400 == 0) || ((m_nYear%4 == 0) && (m_nYear%100 != 0))) return true; return false; }public: void Print() //以“年//月//日”格式输出日期 { printf("%04d年%02d月%02d日 ", m_nYear, m_nMonth, m_nDay); }void AddOneday() //求出在当前日期加上一天后的日期 { if(m_nDay >= Days[m_nMonth -1]) { if(m_nMonth == 2 && IsLeapYear()) { m_nDay ++; } else { m_nDay =1; if(m_nMonth == 12) { m_nMonth = 1; m_nYear ++; } else { m_nMonth ++; } } } else { m_nDay ++; } }};void main(){ CDate d1(2009, 1, 1); d1.Print(); d1.AddOneday(); d1.Print(); CDate d2(2008, 2, 28); d2.Print(); d2.AddOneday(); d2.Print(); CDate d3(2009, 5, 31); d3.Print(); d3.AddOneday(); d3.Print(); CDate d4(2009, 12, 31); d4.Print(); d4.AddOneday(); d4.Print();}以上放入一个CPP文件即可,选择Console程序。 关于初始化变量,没有Check输入值得有效性,请自行添加检查。2023-06-06 11:03:271
C++面向对象的静态函数问题,我一直改来改去都不行,求大神求助。
贴的这么乱,你报什么错2023-06-06 11:03:342