了解 C 中的静态变量 [附编码示例]

已发表: 2020-10-21

在您的编程之旅中,您可能已经解决了大多数变量。 对于任何程序员来说,它们都是一个非常重要的方面,因为声明变量决定了存储在内存中的值的大小、布局、范围以及要应用于它的操作集。 它是程序可以操作的存储区域的名称。 在本文中,我们将讨论 C 语言中最重要的变量之一,即静态变量

C 语言中的 static 关键字使用频率很高。 大多数程序员经常混淆的一件事是局部变量和全局变量如何影响静态变量。 在每种情况下,静态关键字在数据存储位置和在整个程序中的行为方式方面都不同。 以下是静态关键字的主要用途:

一世。 函数中的局部变量静态局部变量:可见性与自动局部变量相同。

ii. 模块中的全局变量静态全局变量:在程序顶部声明。

iii. 模块中的函数静态函数:它存在于整个程序中。

iv. 成员变量静态成员变量:由类的所有实例访问。

v.方法静态方法:由类的所有实例访问。

我们将研究所有三个用例以及它们如何随着变量的存储区域而变化并提高代码质量。

目录

什么是静态变量?

在编程中,静态变量是“静态”分配的变量,这意味着它的生命周期贯穿整个程序运行。 它使用“静态”关键字声明,并在函数调用中保持其值。

句法:

静态变量的语法是:

静态数据类型变量名;

静态变量声明

声明静态变量时,会创建它的副本。 这些用于代替局部变量的主要目的是它们保留在它存在的范围内分配的值。 程序员不需要在程序的新范围内一次又一次地初始化变量。 它存在于整个程序中。

一般来说,静态是适用于任何数据类型的存储类说明符。 它指示编译器将变量或函数限制在程序范围内,并在程序的整个生命周期中持续存在。 此属性允许封装静态变量或从程序的其余部分隐藏变量,以防止任何意外访问。 开发人员可以控制如何在模块中访问变量。 这是一个很好的编程习惯。

阅读:前 130 多个 Java 面试问题和答案

程序中的静态变量

· 在整个代码的执行过程中,一个静态变量保留在内存空间中。

·静态变量的默认初始化值为零,即使它没有被赋值,而在局部变量中则不然。

· 在 C 中必须使用static 关键字初始化静态变量否则将返回错误。

·静态变量仅在第一次调用函数时初始化。

· 在静态变量中,分配静态变量的内存

·在程序之外无法访问全局静态变量

C中静态变量的基本程序

#include <stdio.h>

主函数()

{

printf(“%d”,func());

printf(“\n%d”,func());

返回0;

}

整数函数()

{

静止的 整数计数=0;

计数++;

返回计数;

}

在此代码中,count 变量被声明为静态变量 每次调用 func() 时,count 的值都会更新为 1。在下一次函数调用中,count 变量的值会变为 2。因此,静态变量的值会在函数调用中保持不变。

输出:

1

2

局部变量和静态变量之间的区别

局部变量和静态变量在程序中可以互换使用。 以下是两者之间的一些主要区别:

区分点局部变量静态变量
变量关键字声明1.由自动变量声明,例如 int a = 1。 1.静态变量声明,例如static int a = 1。
变量声明2.在函数内部声明。 2.在函数内部或外部声明。
变量创建3.每次调用函数时都会创建它。 3.只为第一个函数调用创建,同一个变量用于进一步调用。
变量初始化4.每次调用函数时都会初始化。 4.在一个程序中只初始化一次。
变量默认值5.如果没有初始化,则变量中存储一个垃圾值。 5 、如果没有初始化,默认值0存储在static中。
可变终止6.当函数结束时,它终止。 6.如果在函数内部声明,则只能在该函数中访问。 范围仅限于该函数,其生命周期是直到程序终止。 如果在函数外部声明,该变量将是全局的,并且可以被文件中的任何函数访问。 范围是文件,但生命周期是直到程序终止。

有了这张表,就很清楚为什么静态变量比局部变量更受欢迎。

包含局部变量和静态变量的代码

#include <stdio.h>

int main() {

自动int a = -15;

静态int b = 5;

printf("自动变量 a 的值为 %d\n", a);

printf("静态变量b 的值为 %d\n",b);

如果(一!= 0)

printf("静态变量和自动变量之和为 %d\n",(b+a));

返回0;

}

程序输出:

auto 变量的值为 -15

静态变量值为5

静态变量和自动变量之和为 -10

另请阅读: C 项目理念

概括

static 关键字广泛用于它在 C 编程中提供的许多特性。 它的主要用途是限制函数或模块中定义的变量的范围。 开发人员可以体验到安全性,因为变量和函数可以通过使用静态变量对外部程序隐藏 在许多现代面向对象语言中,静态的使用被私有和公共所取代。

如果您有兴趣了解更多信息并需要行业专家的指导,请查看 upGrad & IIIT Banglore 的全栈软件开发PG 文凭。

为未来的职业做准备

行业值得信赖的学习 - 行业认可的认证。
今天报名