static关键字的作用

msdn上是这么解释的:

可以用在变量,函数,类数据成员和类函数前面。

By default, an object or variable that is defined outside all blocks has static duration and external linkage. Static duration means that the object or variable is allocated when the program starts and is deallocated when the program ends. External linkage means that the name of the variable is visible from outside the file in which the variable is declared. Conversely, internal linkage means that the name is not visible outside the file in which the variable is declared.

默认的,一个对象或者变量在所有模块外部定义有静态生命期和外部链接。静态生命期意味着这个对象和变量当程序开始时被分配,程序结束时释放。外部链接意味着变量的名字在文件外部是可见的。

关于内部链接和外部链接:

内部连接如果一个名称对于它的编译单元来说是局部的,并且在连接时不会与其它编译单元中的同样的名称相冲突,那么这个名称有内部连接(注:有时也将声明看作是无连接的,这里我们统一看成是内部连接的)。

以下情况有内部连接:
   a)所有的声明
   b)名字空间(包括全局名字空间)中的静态自由函数、静态友元函数、静态变量的定义,const常量定义
   c)enum定义
   d)inline函数定义(包括自由函数和非自由函数)
   e)类的定义
   f)union的定义

   
   外部连接: 在一个多文件程序中,如果一个名称在连接时可以和其它编译单元交互,那么这个名称就有外部连接。
以下情况有外部连接:
   a)类非inline函数总有外部连接。包括类成员函数和类静态成员函数
   b)类静态成员变量总有外部连接。
   c)名字空间(包括全局名字空间)中非静态自由函数、非静态友元函数及非静态变量


The static keyword can be used in the following situations.

  • When you declare a variable or function at file scope (global and/or namespace scope), the static keyword specifies that the variable or function has internal linkage. When you declare a variable, the variable has static duration and the compiler initializes it to 0 unless you specify another value.

  • 当在函数里声明一个变量,static关键字指定了这个变量在调用函数后一直保持它的状态。

  • 当你在类的声明里声明了一个数据成员,static指定所有类的实例共享一份拷贝。一个静态数据成员必须定义在文件作用域里。

  • When you declare a member function in a class declaration, the static keyword specifies that the function is shared by all instances of the class. A static member function cannot access an instance member because the function does not have an implicit this pointer. To access an instance member, declare the function with a parameter that is an instance pointer or reference.

  • 当你在一个类的声明里声明一个成员函数,static指定这个函数被类的所有实例共享。一个静态成员函数不能访问实例成员,因为这个函数没有包含这个指针。去访问实例成员,声明带有参数的函数 这是一个实力指针或者引用。

  • You cannot declare the members of a union as static. However, a globally declared anonymous union must be explicitly declared static.

  • 不能在一个union的成员用static。然而,一个全局


在C语言中,static关键字有多种作用。其中之一就是修饰局部变量。当static用于修饰局部变量时,该变量只能在声明它的函数内部使用,无法被其他函数访问到。此外,这种修饰方式还具有以下几个特点: 1. 静态局部变量在程序执行过程中只会被初始化一次,在函数调用时会保持其值不变。 2. 静态局部变量的作用域仅限于声明它的函数内部,也就是说,它只在该函数内部可见,不会被其他函数访问到。 3. 静态局部变量在函数执行结束后不会被销毁,而是会一直存在于程序的整个生命周期中。 通过使用static修饰局部变量,可以实现在函数调用之间保持变量的值不变、避免与其他函数的同名变量冲突等效果。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [C语言中的Static关键字作用](https://blog.csdn.net/weixin_65132948/article/details/123943258)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [初识C语言——关键字static作用](https://blog.csdn.net/m0_70980326/article/details/125937438)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值