1、关键字static的作用
- 静态成员变量
所有对象共享同一份数据
在编译阶段分配内存
类内声明,类外初始化
- 静态成员函数
所有对象共享同一个函数
静态成员函数只能访问静态成员变量
2、static的应用场景?
①静态变量(静态成员变量)
在类中声明的静态变量是该类的所有对象共享的;并且可以通过类名调用
class MyClass {
public:
static int count; // 静态成员变量
MyClass() {
count++;
}
};
int MyClass::count = 0; // 静态成员变量类内声明,类外初始化
静态只能访问静态,但非静态既能访问静态也能访问非静态。
②静态函数(静态成员函数)
在类中定义的静态成员函数,静态函数是与类关联的函数,而不是与类的对象关联
通常用于执行与类相关的操作,而不需要访问类的实例(不需要实例化对象)。
class MathUtility {
public:
static int add(int a, int b) {
return a + b;
}
};
int result = MathUtility::add(5, 3); // 使用静态函数
③静态局部变量
静态局部变量在函数内部声明,但只初始化一次,然后在函数多次调用时保留其值。它们通常用于保存函数的状态信息。
其生命周期贯穿整个程序运行过程,而不仅仅是在函数调用时存在。
int myFunction() {
static int counter = 0; // 静态局部变量
counter++;
return counter;
}
④静态类
在 C++ 中,可以将类声明为静态,这将导致类的成员变量和成员函数也成为静态的
static
类是一种不能被实例化的类,通常用于包含一组静态方法或静态属性的命名空间。
public static class MathOperations {
public static int add(int a, int b) {
return a + b;
}
}
3、引用和指针的区别?
指针:指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元,即指针是一个实体;
引用:跟原来的变量实质上是一个东西,只不过是原变量的一个别名而已。
区别:
1. 引用必须初始化,指针不需要。
2. 引用不能为空,指针可以为空。
3. 引用初始化后不能改变,指针可以改变所指对象的值。
4. 引用访问对象是直接访问,指针访问对象是间接访问。
5. 引用没有 const,指针有 const。
6. 指针是一个实体,而引用仅是个别名
4、指针大小只与系统有关,变量大小与系统和数据类型有关
①在32位系统中,指针大小为4字节。
②在64位系统中,指针大小为8字节。
③64位系统 char **p[4]:指针数组的大小是8*4=32
5、p、*p、&p的区别
p是一个指向数据类型的指针变量,存储的是某个变量的内存地址。
*p表示通过指针"p"访问的值。
&p就是取指针p的地址。
**p:二级指针,表示p所指向的地址里面存放的是一个指向类型的指针。
6、运算符优先级
! >算术运算符(+-*/)>关系运算符(==>=<=)>逻辑运算符&&>||>赋值运算符(=+=-=)