一文秒懂static关键字

一、static用法解析代码

1、c语言代码

以下是一个使用 C 语言中静态变量static的示例:

//示例1
#include <stdio.h>

void increment() {
    static int count = 0;
    count++;
    printf("Count: %d\n", count);
}

int main() {
    increment();  // 输出:Count: 1
    increment();  // 输出:Count: 2
    increment();  // 输出:Count: 3
    
    return 0;
}

如果在示例中不使用 static 关键字声明变量,那么每次函数调用时该变量都会重新初始化。下面是一个对比示例:

//示例2
#include <stdio.h>

void increment() {
    int count = 0;
    count++;
    printf("Count: %d\n", count);
}

int main() {
    increment();  // 输出:Count: 1
    increment();  // 输出:Count: 1
    increment();  // 输出:Count: 1
    
    return 0;
}
示例1解析:

在上述示例1中,increment() 函数内部声明了一个静态变量 count。每次调用 increment() 函数时,count 的值都会自增,并使用 printf 函数输出当前的计数值。

静态变量 count 在第一次调用 increment() 时被初始化为 0,然后在后续的函数调用中保持其值,不会重复创建和销毁。这意味着 count 变量会在函数调用之间保留状态,并且可以在多次函数调用中共享数据。

通过运行上述代码,您将看到每次调用 increment() 函数时,计数器的值都会增加,并按顺序输出相应的计数值。这展示了静态变量在跨函数调用之间保留状态的特性。

示例2解析

在上述示例2中,increment() 函数内部的 count 变量没有使用 static 关键字进行声明。每次调用 increment() 函数时,count 都会被重新声明和初始化为0。

因此,在每次调用 increment() 函数时,count 都会从0开始递增,并使用 printf 函数显示计数值为1。这是因为每次函数调用都创建了一个新的 count 变量,它的作用域仅限于当前函数调用。因此,变量的状态无法在多次函数调用之间保持。

通过运行上述代码,您将看到无论调用 increment() 函数多少次,计数器的值始终为1,而不会像使用静态变量那样递增。这反映了没有使用 static 关键字时,变量在每次函数调用时都会重新初始化的特性。

2、c++ 代码

以下是一个使用静态变量static的示例,展示了在函数内部声明静态变量的情况:

//示例1
#include <iostream>

void increment() {
    static int count = 0;
    count++;
    std::cout << "Count: " << count << std::endl;
}

int main() {
    increment();  // 输出:Count: 1
    increment();  // 输出:Count: 2
    increment();  // 输出:Count: 3
    
    return 0;
}

如果在示例中不使用 static 关键字声明变量,那么每次函数调用时该变量都会重新初始化。下面是一个对比示例:

//示例2
#include <iostream>

void increment() {
    int count = 0;
    count++;
    std::cout << "Count: " << count << std::endl;
}

int main() {
    increment();  // 输出:Count: 1
    increment();  // 输出:Count: 1
    increment();  // 输出:Count: 1
    
    return 0;
}

在上述示例2中increment() 函数内部的 count 变量没有使用 static 关键字进行声明。每次调用 increment() 函数时,count 都会被重新声明和初始化为0。

因此,在每次调用 increment() 函数时,count 都会从0开始递增,并在输出语句中显示计数值为1。这是因为每次函数调用都创建了一个新的 count 变量,它的作用域仅限于当前函数调用。因此,变量的状态无法在多次函数调用之间保持。

通过运行上述代码,您将看到无论调用 increment() 函数多少次,计数器的值始终为1,而不会像使用静态变量那样递增。这反映了没有使用 static 关键字时,变量在每次函数调用时都会重新初始化的特性。

在上述示例1中increment() 函数内部声明了一个静态变量 count。每次调用 increment() 函数时,count 的值都会自增,并输出当前的计数值。

静态变量 count 在第一次调用 increment() 时被初始化为0,然后在后续的函数调用中保持其值,不会重复创建和销毁。这意味着 count 变量会在函数调用之间保留状态,并且可以在多次函数调用中共享数据。

通过运行上述代码,您将看到每次调用 increment() 函数时,计数器的值都会增加,并按顺序输出相应的计数值。这展示了静态变量在跨函数调用之间保留状态的特性。

二、static关键字的几种用法说明

当提到 static 关键字时,它可以应用于不同的上下文和语言元素,具体用法如下:

  1. 静态变量:

    • 在函数内部声明的静态变量:在函数内部使用 static 关键字声明的变量。这些变量不会在每次函数调用时重新初始化,而是在整个程序运行期间保持其值。它们通常用于需要在函数调用之间保留状态或共享数据的情况。
  2. 静态函数/方法:

    • 在函数或方法声明前使用 static 关键字修饰的函数。静态函数不依赖于类的实例,因此无法访问非静态成员变量,只能访问其他静态成员。可以直接通过类名调用静态函数,而不需要实例化类对象。
  3. 静态成员变量:

    • 在类中使用 static 关键字声明的成员变量。静态成员变量与类的实例无关,它们在所有类的实例之间共享相同的值。可以通过类名直接访问静态成员变量,而不需要创建类的实例对象。
  4. 静态代码块:

    • 静态代码块是在类加载时执行的代码块,并且只会执行一次。可以使用 static 关键字定义静态代码块,在其中进行一些初始化操作或静态成员的赋值。
  5. 静态类:

    • 某些编程语言允许使用 static 关键字来声明静态类。静态类是一种不能实例化的类,它只包含静态成员(静态方法和静态变量)。静态类主要用于组织相关的静态成员,提供一组共享的功能或服务。

需要注意的是,每种编程语言对 static 关键字的具体用法和语义可能会有所不同。因此,在实际使用中,建议参考特定编程语言的文档和规范,以了解在该语言中如何使用和理解 static 关键字。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MrWang.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值