static的使用

static的使用

在C语言中,static是一个关键字,用于指定变量、函数和代码块的作用域和生命周期。

用法:

静态变量

1.修饰变量:使用static关键字声明的变量是静态变量,它们的作用域被限制在定义它们的源文件中,它们的生命周期从程序开始运行到程序结束。静态变量的初始值为0。

在函数内部声明的静态变量具有以下特性:

· 生命周期:静态变量的生命周期从程序开始执行到程序结束,它们在整个程序执行期间都存在,而不是在函数调用期间创建和销毁。

· 可见性:静态变量的作用域仅限于包含它们的函数内部,即它们是局部变量,但其值在函数调用之间保持不变。

· 初次初始化:静态变量只在第一次进入其定义的函数时进行初始化,并且仅执行一次。

#include <stdio.h>

void increment(void);

int main()
{
    increment();//1
    increment();//2
    increment();//3
    return 0;
}

void increment(void)
{
    static int count = 0;//静态变量
    count++;
    printf("当前的计数值为:%d\n",count);
}

在这里插入图片描述

在函数外部(全局范围)声明的静态变量具有以下特性:

· 生命周期:静态全局变量的生命周期与程序的执行周期相同,但它们只在声明它们的源文件中可见,不能被其他源文件访问。

· 可见性:静态全局变量的作用域限于声明它们的源文件,不能被其他源文件使用。

2.修饰函数:使用static关键字声明的函数是静态函数,它们的作用域被限制在定义它们的源文件中,它们不能被其他文件中的函数调用。静态函数只能在定义它们的文件中使用。

使用’static’关键字声明的函数是静态函数。静态函数具有以下特性:

· 可见性:静态函数的作用域限于声明它们的源文件,不能被其他源文件调用。

· 隐藏性:将函数声明为静态的,可以将其隐藏在当前源文件中,以防止与其他源文件中具有相同名称的函数发生冲突。

#include <stdio.h>

static void increment(void);

int main()
{
    increment();//1
    increment();//2
    increment();//3
    return 0;
}
//定义一个静态函数,只能在定义它的文件中使用
static void increment(void)
{
    static int count = 0;//静态变量
    count++;
    printf("当前的计数值为:%d\n",count);
}

3.修饰代码块:使用static关键字声明的代码块被称为静态代码块,它们只会在第一次使用它们的时候被执行一次,之后不会再次执行。

注意事项:

【1】静态变量和函数只能被定义一次,不能在其他文件中再次定义。

【2】静态变量和函数的作用域和生命周期不同于普通变量和函数,它们的值在程序运行期间一直存在。

【3】静态变量的初始值为0,如果没有显示地给静态变量赋初值,则它们的值为0。

【4】静态函数只能在定义它们的文件中使用,不能被其他文件中的函数调用。

【5】静态代码块只会在第一次使用它们的时候被执行一次,之后不会再次执行。

`static`关键字在C语言中有多个作用,具体取决于它的使用位置。这里列举了几个常见的`static`用法及其示例: 1. **静态变量(全局或局部)**: - 全局静态变量(外部链接存储类): ``` static int globalVar; // 只有一份拷贝,生命周期从程序开始到结束 ``` - 局部静态变量(内部链接存储类): ``` void func() { static int localVar; // 每次函数调用都会创建一个新的局部静态变量,但只初始化一次 } ``` 2. **静态函数**: - 它们属于特定的类,全局静态函数不能直接访问非静态成员: ``` class MyClass { static void staticFunction(); // 可被类的所有实例共享 }; ``` 3. **静态数组**: - 全局静态数组: ``` static int arr[10]; // 全局范围内的静态数组,所有源文件可见 ``` - 函数内静态数组: ``` void function() { static int localArr[5]; // 在栈上分配空间,每次进入函数时初始化 } ``` 4. **静态局部对象**: 这种情况下,静态局部变量在每次函数调用时会被自动初始化,但其值会在函数退出后保留: ``` void function() { static int result = someComputation(); } ``` 5. **静态成员函数/数据成员**: 对于类,`static`用于表示静态成员,它们不属于特定对象,而是属于整个类的实例: ``` class MyClass { static void staticMethod(); // 类级别的方法,不需要创建对象就能访问 static int staticData; }; ``` 在使用`static`时要考虑到内存管理、作用域以及对性能的影响。了解这些用法后,请告诉我您感兴趣的具体方面,或者有其他疑问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

傻童:CPU

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

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

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

打赏作者

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

抵扣说明:

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

余额充值