static关键字的作用
static关键字
力扣——两数之和
int* twoSum(int* nums, int numsSize, int target, int* returnSize)
{
static int num[2] = {0};//因为要返回,所以使用静态局部变量
for(int i=0;i<numsSize;i++)
{
for(int j=i+1;j<numsSize-1;j++)
{
if( (nums[i] + nums[j]) == target )
{
num[0] = i;
num[1] = j;
*returnSize = 2;
return num;
}
}
}
return NULL;
}
1、修饰局部变量
- 普通局部变量保存在栈中,使用完毕后会立即释放
- 静态局部变量保存在数据区,即使函数返回,值也不会变,与全局变量类似但有利于程序模块化
#include <stdio.h>
#include <string.h>
void func()
{
static int count = 0;
count++;
printf("%d\n", count);
}
int main (int argc, char **argv)
{
int i = 0;
for(i;i<3;i++)
{
func();
}
return 0;
}
li@raspberrypi3:~/test $ ./a.out
1
2
3
2、修饰全局变量
- 普通全局变量对整个工程可见,其他文件使用extern后可直接使用
- 静态全局变量仅对当前文件可见,其他文件可以使用这个变量名
3、修饰函数
- 只能在声明它的文件中可见。对于静态函数,声明和定义需要放在同一个文件夹中。
4、修饰成员变量
- static成员变量属于类本身,而不是类的某个特定对象。所有类的对象共享同一个静态成员变量。
- static成员变量必须在类外进行定义和初始化,即使在类内部已经声明。
5、修饰成员函数
- static成员函数属于类本身,而不是类的对象。只能访问静态成员变量和其他静态成员函数,不能访问非静态成员变量和函数。
- 可以通过类名直接调用静态成员函数,也可以通过对象调用。
#include<iostream>
using namespace std;
class MyClass {
public:
// 声明静态成员变量
static int staticMember;
// 静态成员函数
static void displayStaticMember() {
cout << "Static Member: " << staticMember << endl;
}
};
// 定义和初始化静态成员变量
int MyClass::staticMember = 10;
int main()
{
// 通过类名访问静态成员函数
MyClass::displayStaticMember();
// 修改静态成员变量
MyClass::staticMember = 20;
MyClass::displayStaticMember();
// 创建多个对象并访问静态成员变量
MyClass obj1, obj2;
// 静态成员变量共享,修改任何一个对象的值,所有对象看到的都是最新值
obj1.staticMember = 30;
cout << "Static Member obj2: " << obj2.staticMember << endl;
return 0;
}
Static Member: 10
Static Member: 20
Static Member obj2: 30