static 修饰的变量区别
时间: 2023-11-04 11:04:25 浏览: 86
在C++中,`static`关键字可以用来修饰变量,其作用有以下几种:
1. 静态局部变量(在函数内部使用`static`修饰的变量):静态局部变量的生命周期与程序的生命周期一样长。当函数第一次被调用时,静态局部变量被初始化,之后再次调用该函数时,静态局部变量的值会保持上次调用的结果。它的作用域仅限于函数内部。
2. 静态全局变量(在全局作用域使用`static`修饰的变量):静态全局变量的作用域仅限于定义它的文件内部,不能被其他文件访问。它的生命周期与程序的生命周期一样长。
3. 类的静态成员变量(在类中使用`static`修饰的变量):静态成员变量属于类,而不是属于类的任何一个对象。它的作用域为整个类,可以通过类名和作用域运算符来访问。它的生命周期与程序的生命周期一样长。
需要注意的是,静态变量只会被初始化一次,即使多次创建对象或调用函数,其值也不会被重新初始化。另外,静态变量不占用对象的内存空间,而是在全局数据区分配内存。
相关问题
5、Static全局变量与普通全局变量的区别;Static局部变量与普通局部变量的区别;static函数与普通函数区别; C++ 类中static成员与非static成员变量区别。(10 分)
1. Static全局变量与普通全局变量的区别:
- 静态全局变量的作用域仅限于定义该变量的源文件内,也就是说,在同一源程序的其他源文件中不能使用它;
- 普通全局变量则可以被同一程序中的所有源文件共享。
2. Static局部变量与普通局部变量的区别:
- 静态局部变量在程序执行过程中只被创建一次,不会随着函数的退出而被销毁,仍然保存在内存中,下次调用函数时可以继续使用;
- 普通局部变量在每次函数调用时都会被重新创建,函数退出时会被销毁。
3. Static函数与普通函数区别:
- 静态函数只能在当前文件中使用,其他文件无法调用该函数;
- 普通函数可以被其他文件调用。
4. C++ 类中static成员与非static成员变量区别:
- 非static成员变量属于对象级别,每个类对象都有一份,不同对象的该变量值可以不同;
- static成员变量属于类级别,所有类对象共享一份,无论创建多少个类对象,该变量只有一份。而且,static成员变量必须在类外初始化,因为它不属于任何一个对象。
总的来说,static修饰的变量和函数都具有“静态”的特性,这种特性使得它们在内存中只有一份拷贝,可以被多次调用或共享使用。
static修饰变量,在数组对象中值会相同吗
使用`static`修饰的变量是该类的所有对象共享的,因此在多个数组对象中,该变量的值会相同。无论创建多少个数组对象,它们都会共享同一个静态变量的值,因为静态变量存储在该类的静态存储区中,而不是存储在对象的堆内存中。所以如果修改了一个数组对象中的静态变量的值,那么其他数组对象中的该静态变量的值也会发生改变。需要注意的是,这种共享静态变量的设计可能会带来一些意外的副作用,因此在使用时需要小心谨慎。
阅读全文