嵌入式八股文之旅 DAY3 static

主要是static的使用 总结为如下

1

        在 C 中,static 用于局部变量:当 static 用于函数内的局部变量时,它会改变这个变量的存储类型,使其从自动存储(函数调用时分配,函数返回时释放)变为静态存储(程序启动时分配,程序结束时释放)。这意味着即使函数返回,这个变量也会保持其值,直到下次函数调用。

void func() {
    static int x = 0;
    x++;
    printf("%d\n", x);
}

在这个例子中,每次调用 func()x 的值都会增加,而不是被重置为 0。

也就是你是可以在这个函数外面去定义同名的static变量的 比如说static int x=1;全局变量这样 其实就是把动态分配的内存(运行时分配)改为静态了 (编译时分配) 你只能通过这个函数去调用这个变量 但是每调用一次 它的值会+1 你退出了 这个变量还是+1的状态不会被初始化。

2

        在 C 中,static 用于全局变量static 全局变量的存储期与普通全局变量相同,但其链接属性不同。static 全局变量只在定义它的文件中可见,这使你可以在不同的文件中定义同名的 static 全局变量,而不会引起冲突。

// file1.c
static int x = 1;  // 只在 file1.c 中可见

// file2.c
static int x = 2;  // 只在 file2.c 中可见,与 file1.c 中的 'x' 不冲突

这个就是在不同的.c文件中去定义全局变量是可以的 即使你在.h文件中声明一个全局变量 但是每个.c文件还是会得到不同的副本

3

        在 C 中,static 用于函数static 函数只在定义它的文件中可见。这使你可以在不同的文件中定义同名的 static 函数,而不会引起冲突。这是一种封装技术,可以防止函数被意外调用。

// file1.c
static void func() { /* ... */ }  // 只在 file1.c 中可见

// file2.c
static void func() { /* ... */ }  // 只在 file2.c 中可见,与 file1.c 中的 'func()' 不冲突

4

        在 C++ 中,static 用于类成员变量static 类成员变量是类的所有实例共享的。它们在程序的生命周期内只有一份拷贝,不像非 static 成员变量那样每个实例都有一份拷贝。你可以通过类名(而不是实例)来访问 static 类成员变量。

class MyClass {
public:
    static int x;  // 所有 MyClass 的实例共享同一份 'x'
};

 5

        在 C++ 中,static 用于类成员函数static 类成员函数可以在没有类的实例的情况下被调用。它们只能访问类的 static 成员变量或函数,因为它们没有 this 指针。

class MyClass {
public:
    static void func() { /* 只能访问 MyClass 的 static 成员 */ }
};

在这个例子中,你可以通过 MyClass::func() 来调用 func(),而不需要创建 MyClass 的实例。、

6 const 和static不能同时修饰成员函数 因为静态成员函数没有this指针 不能实例化 而const成员函数必须具体到某一实例 static修饰成员函数也不能声明为virtual

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值