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
posted @ 2024-07-28 12:55  梨子Li  阅读(1)  评论(0编辑  收藏  举报