静态变量与非静态变量的区别
1、存储位置不同
静态变量:存储在全局数据区(静态数据区)。
非静态变量叫动态变量:存储在内存出栈数据区。
2、生命期不同
动态变量:根据你定义的位置确定,比如你在一个函数中定义的,那么超出该函数范围变量将失效。
静态变量:程序结束时才释放。
3、作用域不同
动态变量:同样的要根据你定义的位置才能确定,和第二点的一样。
静态变量:当前文件中有效。
扩展资料;
静态变量的作用;
1、对于静态全局变量,源文件静态声明的文件级变量和函数的作用域仅限于文件(仅在文件中可见),即内部连接,因此可以用来限制变量的作用域。
2、对于静态局部变量,虽然函数内静态声明的变量范围与自动局部变量的范围相同(即范围仅在函数内),但存储空间是通过静态分配而不是默认的自动分配获得的。
所以存储空间在不同的区域是不同的(一般来说,静态分配时在编译时在程序数据段中划分存储空间,一次性分配在整个过程中是有效的。而在自动分配时,存储空间是在调用堆栈上分配的,只分配和释放在调用期间),两个调用之间的变量值总是一致的。必须注意,静态局部变量只能初始化一次,这是由编译器保证的。
3、对于静态成员变量,在C++中,类定义中静态声明的成员变量属于类变量,即它们在所有类实例中共享,相反是过程变量。
参考资料来源;百度百科——静态变量
2023-08-29 广告
...
//定义列表为全局静态变量
public static List<string> Data=new list<string>(100);
...
B窗体类:
...
//访问列表值
foreach (string n in aaa)
{
Console.WriteLine(A.Data[n]);
}
...
静态变量与非静态变量的区别如下:
1.内存分配
静态变量在应用程序初始化时,就存在于内存当中,直到它所在的类的程序运行结束时才消亡;
而非静态变量需要被实例化后才会分配内存。
2.生存周期
静态变量生存周期为应用程序的存在周期;
非静态变量的存在周期取决于实例化的类的存在周期。
3.调用方式
静态变量只能通过“类.静态变量名”调用,类的实例不能调用;
非静态变量当该变量所在的类被实例化后,可通过实例化的类名直接访问。
4.共享方式
静态变量是全局变量,被所有类的实例对象共享,即一个实例的改变了静态变量的值,其他同类的实例读到的就是变化后的值;
非静态变量是局部变量,不共享的。
5.访问方式
静态成员不能访问非静态成员;
非静态成员可以访问静态成员。
请参考
A窗体类:
...
//定义列表为全局静态变量
public static List<string> Data=new list<string>(100);
...
B窗体类:
...
//访问列表值
foreach (string n in aaa)
{
Console.WriteLine(A.Data[n]);
}
...
静态变量与非静态变量的区别如下:
1.内存分配
静态变量在应用程序初始化时,就存在于内存当中,直到它所在的类的程序运行结束时才消亡;
而非静态变量需要被实例化后才会分配内存。
2.生存周期
静态变量生存周期为应用程序的存在周期;
非静态变量的存在周期取决于实例化的类的存在周期。
3.调用方式
静态变量只能通过“类.静态变量名”调用,类的实例不能调用;
非静态变量当该变量所在的类被实例化后,可通过实例化的类名直接访问。
4.共享方式
静态变量是全局变量,被所有类的实例对象共享,即一个实例的改变了静态变量的值,其他同类的实例读到的就是变化后的值;
非静态变量是局部变量,不共享的。
5.访问方式
静态成员不能访问非静态成员;
非静态成员可以访问静态成员。
请参考
静态变量只能通过“类.静态变量名”调用,类的实例也可以调用;