C++ c+;中的静态变量和正常变量之间有什么区别+;?
我是初学者,我需要知道其中的区别。静态变量是与类关联的单个内存位置 非静态变量(类的成员)表示类的每个实例的不同内存位置 静态变量只能初始化一次,并在创建对象时分配给0。C++ c+;中的静态变量和正常变量之间有什么区别+;?,c++,C++,我是初学者,我需要知道其中的区别。静态变量是与类关联的单个内存位置 非静态变量(类的成员)表示类的每个实例的不同内存位置 静态变量只能初始化一次,并在创建对象时分配给0。 静态命名空间范围变量具有内部链接,而默认情况下,非静态命名空间范围变量具有外部链接!详细信息:默认情况下,const命名空间范围变量具有内部链接。该链接可以通过关键字extern更改 静态类中的变量与该类相关联,即该类的所有实例都具有相同的静态变量实例;它们就像一个全局变量,同一类的每个实例都可以访问它 类中的非静态变量是实例
命名空间范围变量具有内部链接,而默认情况下,非静态
命名空间范围变量具有外部链接!详细信息:默认情况下,静态
命名空间范围变量具有内部链接。该链接可以通过关键字const
更改extern
类中的变量与该类相关联,即该类的所有实例都具有相同的静态变量实例;它们就像一个全局变量,同一类的每个实例都可以访问它静态
- 类中的非静态变量是实例成员,也就是说,类的每个实例都有自己的非静态变量实例
- 如果类的名称具有外部链接,则类的
数据成员具有外部链接。[$3.5/5]静态
- 函数中的
变量即使从函数返回后仍保留其值。 也就是说,它的生存期等于程序本身的生存期。这在中得到了证明静态
- 假设
A类
具有静态变量x。。。而不是静态变量p
现在,如果您创建类A的一百个实例(即
aa;
),x将在这一百个实例之间共享。。。但是会有上百份。。。每个静态变量实例的一个p副本在函数调用/循环期间保留其值,但局部变量不保留其值
#include <iostream>
void foo()
{
for( int i=0; i<5; ++i )
{
static int staticVariable = 0;
int local = 0;
++local;
++staticVariable;
cout << local << "\t" << staticVariable << "\n";
}
}
int main()
{
foo();
return 0;
}
有三种不同类型的“静态”变量
静态
变量不是全局变量,而是定义它的.cpp文件的局部变量。(不要在头文件中定义这种类型的静态变量!)
静态
变量即使在函数退出后仍保留其值静态变量保留其值,而非静态或动态变量在每次调用函数时初始化为“1”。希望有帮助。静态变量和普通变量的主要区别在于它们的生存期,例如局部变量的作用域和生存期在声明它的函数循环中,但静态变量的作用域与局部变量的作用域相同,这意味着它将在声明它的函数中被访问(如果没有全局定义),但生命是通过程序实现的。所以内存分配取决于生存期,所以静态变量在程序终止之前不会死亡,所以没有分配新的内存,所以分配给静态变量的固定内存地址和地址中的值将在每次我们更改变量的值时被覆盖,而对于普通变量,一旦超出范围,变量将消失(意味着该变量的内存将被释放),当您再次定义变量时,将分配新的内存地址,新值将存储在地址中,并且没有覆盖的概念(当我们超出范围时)。除了所有这些答案的差异,
静态
和局部
变量之间还有一个区别:
局部
变量存储在堆栈上,而静态
变量存储在进程内存的数据
部分。主要的区别是“静态变量”和“局部变量”
如果局部变量的工作完成,的内存分配将取消分配,
另一方面,静态变量的内存分配保持不变
直到程序终止或被程序的另一个值覆盖
例如,假设您正在使用递归问题,如果您在递归调用期间使用局部变量,则在函数返回期间,局部变量的内存分配将被删除
另一方面,如果您使用的是静态变量,则该变量的内存分配将一直保持到程序结束。在函数返回时,它应该保持其值,或者可以被程序覆盖。不完全,静态在C++中是非常重载的。拿一本书。任何C++底漆都应该包含这些简单问题的答案,并有很好的例子。C++不是一种可以从论坛/问答网站窥探的语言。UHM,关于第一点,我们(至少我)经常说“静态变量”是“静态存储变量”的缩写。后者是本标准使用的正式术语。这些变量可以有外部链接,但这是一个术语问题。我建议
class foo
{
public:
static int staticVariable;
};
int foo::staticVariable = 0;
foo obj1, obj2 ; // Both the instances share the static variable.
void func()
{
static int static_var=1;
int non_static_var=1;
static_var++;
non_static_var++;
cout<<"Static="<<static_var;
cout<<"NonStatic="<<non_static_var;
}
void main()
{
clrscr();
int i;
for (i=0;i<5;i++)
{
func();
}
getch();
}