C语言之详解静态变量static

C语言之详解静态变量static

在C语言中,关键字static可以用于修饰全局变量,局部变量和函数,其作用分别如下:

1. 修饰全局变量

  • 在全局变量前加上static关键字,表示该变量具有静态存储期和静态链接属性。
  • 在同一文件中的其他函数中不能访问该变量。
  • 只能被定义变量的函数访问。
  • 被初始化为0,除非在定义时显式初始化。
static int a;  // 声明一个静态全局变量

int main() {
    a = 1; // 正确,只能被定义变量的函数访问
    func();
    return 0;
}

void func() {
    a = 2; // 错误,在同一文件中的其他函数中不能访问该变量
}

2. 修饰局部变量

  • 在局部变量前加上static关键字,表示该变量具有静态存储期。
  • 该变量在程序编译时已经被初始化,并且只会在程序运行时被初始化一次,这也就是说局部静态变量的初始化只会在程序的第一次调用时进行。
  • 只能在定义该变量的函数中访问,但他的生命周期与程序相同。
void func() {
    static int a = 0; // 声明一个静态局部变量
    a++;
    printf("%d ", a);
}

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

3. 修饰函数

  • 在函数的声明和定义前加上static关键字,表示该函数只在定义它的文件可见,也称为内部函数。
  • 禁止在其他文件中调用该函数。
static void func() {
    printf("I am a static function");
}

int main() {
    func(); // 正确,只能在定义函数的文件中调用
    return 0;
}

以上就是C语言static关键字的使用方法,希望可以对你有帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言之详解静态变量static - Python技术站

(0)
上一篇 2023年5月24日
下一篇 2023年5月24日

相关文章

  • C语言的合法标识符与整型详解

    C语言的合法标识符与整型详解 在C语言中,标识符是用来标识各种变量、函数、类型等语言元素的名称。其中合法的标识符需要满足以下条件: 由大小写字母、数字或下划线组成; 第一个字符必须是字母或下划线; 标识符的长度不能超过实现所设定的上限; C语言是区分大小写的,因此大小写字母是不同的字符。 例如,以下是一些合法的标识符: foo bar123 var_ MAX…

    C 2023年5月23日
    00
  • C语言实现通用数据结构之通用集合(HashSet)

    C 语言实现通用数据结构之通用集合(HashSet) 什么是 HashSet HashSet 是一种常用的数据结构,其实质就是一个无序不重复的元素集合。在 C 语言中,你可以使用 HashSet 存储任何类型的数据。 HashSet 的优点在于: 独立性,只关心数据的存储和操作,而不必关心数据类型; 方便性,对于处理过程,比起普通数组无需考虑顺序问题。 实现…

    C 2023年5月23日
    00
  • 详解基于C++实现约瑟夫环问题的三种解法

    详解基于C++实现约瑟夫环问题的三种解法 约瑟夫问题 约瑟夫问题是一个经典的问题,是一个圆圈里面有$n$个数字,从中每次删除第$m$个数字,求出每次删除的数字。简单的说,约瑟夫问题就是$n$个人围成一圈,从第一个人开始报数,报到$m$的人出圈,直到计算到最后一个人。 解法一:使用递推(模拟游戏过程) 思路:利用递归的思想模拟即可。假如最后剩下一个数据,则保留…

    C 2023年5月22日
    00
  • C++内核对象封装单实例启动程序的类

    针对这个话题,我来给你详细讲解一下。 什么是C++内核对象封装单实例启动程序的类 C++内核对象封装单实例启动程序的类,是一种用C++编写的程序类,可以确保只有一个实例被启动运行,防止多次启动同一程序时造成的冲突和不必要的资源浪费。该类通常会使用操作系统的内核对象来进行进程管理和控制,保证只有一个实例在运行。 如何实现C++内核对象封装单实例启动程序的类 下…

    C 2023年5月22日
    00
  • php中serialize序列化与json性能测试的示例分析

    PHP中的serialize和json都是用于数据序列化和反序列化的工具,但它们的运行效率存在巨大的差异。 本攻略着重分析serialize和json序列化及反序列化的各种用法和效率,提供PHP序列化和反序列化的最佳实践。 示例1:serialize序列化和反序列化方法的使用 PHP中的serialize方法可以将一个对象或者数组序列化成字符串。 序列化之后…

    C 2023年5月23日
    00
  • C语言围圈报数题目代码实现

    我先来介绍一下 “C语言围圈报数题目代码实现” 是什么: 这是一道经典的数学题目,题目有三个人围成一圈,他们报数,规定报到第三个人的时候要翻过去,也就是从头开始,如此循环,直到只剩下最后一个人。现在我们需要用C语言实现这个过程。 下面是该算法的完整实现,以及代码解析: 思路分析 1.将所有人简化为一个数组,数组的下标表示的是人的编号。2.从第k个人开始循环报…

    C 2023年5月24日
    00
  • C++中头文件的概念与基本编写方法

    C++ 中的头文件是指包含程序中可重用的函数、变量和常量等定义的文件。头文件在程序编写中起到很重要的作用,可以避免在代码中重复定义和声明,提高代码的可读性和可维护性,同时也可以加速编译速度。 下面就详细讲解 C++ 中头文件的概念与基本编写方法: 概念 在 C++ 中,头文件可以分为系统头文件和自定义头文件两种类型。系统头文件是由编译器提供的,包含了一些常用…

    C 2023年5月23日
    00
  • JSON 编辑器实现代码

    实现一个 JSON 编辑器的代码,一般包含以下步骤: 实例化编辑器 首先,我们需要选择一款开源的编辑器库来作为我们的 JSON 编辑器,例如 monaco-editor,ace 等,这些库都可以很方便地实现文本编辑器。 例如使用 monaco-editor 库,我们可以通过以下代码来实例化一个 JSON 编辑器: require.config({ paths…

    C 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部