求c语言中static的用法,什么时候定义要加上他啊? c语言static的用法

c\u8bed\u8a00 \u6570\u7ec4\u7684\u5b9a\u4e49 \u52a0\u4e0astatic \u548c\u4e0d\u52a0 \u6709\u4ec0\u4e48\u533a\u522b\u5462\uff1f

c\u8bed\u8a00\u4e2dstatic\u5173\u952e\u5b57\u6709\u4e24\u4e2a\u4f5c\u7528\uff0c\u4e00\u662f\u6587\u4ef6\u4f5c\u7528\u57df\uff0c\u4e8c\u662f\u51fd\u6570\u4f5c\u7528\u57df\u3002

\u4e00\u3001\u6587\u4ef6\u4f5c\u7528\u57df

\u6587\u4ef6\u4f5c\u7528\u57df\u5173\u952e\u5b57static\u7684\u4f5c\u7528\u662f\uff0c\u4ee5static\u7533\u660e\u7684\u5168\u5c40\u53d8\u91cf\u3001\u51fd\u6570\u4e0d\u5f97\u88ab\u5176\u4ed6\u6587\u4ef6\u6240\u5f15\u7528\uff0c\u4f8b\u5982\uff1a

//\u8fd9\u662fmystr.c\u6587\u4ef6\u7684\u5185\u5bb9
#include

static int num = 10;

int mynum = 100;

static int str_len(char *str)
{
return strlen(str);
}

int mystr_len(char *str)
{
return str_len(str) + num;
}

\u5f53\u4f60mystr.c\u6587\u4ef6\u4e2d\u7684str_len\u51fd\u6570\u52a0\u4e0a\u4e86static\u5173\u952e\u5b57\uff0c\u4f60\u4fbf\u4e0d\u80fd\u5728\u5176\u4ed6\u7684\u5730\u65b9\u590d\u7528\u8fd9\u4e2a\u51fd\u6570\uff0c\u8b6c\u5982\uff0c\u4f60\u4e0d\u80fd\u8fd9\u6837\u5199\uff1a

//\u8fd9\u662fmain.c \u7684\u5185\u5bb9

#include

int main()
{
int len;
len = str_len("hello, world\n");
printf("%d %d\n", num, len )
return 0;
}

gcc main.c mystr_len.c

\u5c06\u4e0d\u80fd\u7f16\u8bd1\u901a\u8fc7\uff0c\u56e0\u4e3amystr.c\u4e2d\u7684num\u53d8\u91cf\u548cstr_len\u51fd\u6570\u90fd\u7528\u4e86static\u5173\u952e\u5b57\uff0c\u5bfc\u81f4\u4ed6\u4eec\u53ea\u80fd\u5728mystr.c\u4e2d\u88ab\u4f7f\u7528\uff0c\u5982\u6587\u4ef6\u4e2d\u7684mystr_len\u51fd\u6570\u53ef\u4ee5\u5f15\u7528num\u53d8\u91cf\u548cstr_len\u51fd\u6570\u3002


//\u8fd9\u662fmain.c \u7684\u5185\u5bb9

#include

int main()
{
int len;
len = mystr_len("hello, world\n");
printf("%d %d\n", my_num, len )
return 0;
}

\u5f53\u4e0d\u7528static\u5173\u952e\u5b57\u65f6\uff0c\u7b49\u540c\u4e8eextern\uff0c\u5373
int mystr_len(char *str)
{
return str_len(str) + num;
}

\u548c

extern int mystr_len(char *str)
{
return str_len(str) + num;
}

\u662f\u4e00\u6837\u7684\u3002


\u4e8c\u3001\u51fd\u6570\u4f5c\u7528\u57df

static\u53e6\u5916\u4e00\u4e2a\u7528\u9014\u662f\u51fd\u6570\u5185\u90e8\u9759\u6001\u53d8\u91cf\uff0c\u6700\u5e38\u7528\u7684\u60c5\u51b5\u662f

int *test()
{
int num = 100;
int *ptr = #
return ptr;
}

int main()
{
printf("%d\n", *test);
return 0;
}

\u8be5\u51fd\u6570\u8fd4\u56de\u6574\u6570num\u7684\u6307\u9488\uff0c\u5728main\u51fd\u6570\u4e2d\u6253\u5370*test\u5c06\u4f1a\u51fa\u73b0\u6bb5\u9519\u8bef\uff0c\u56e0\u4e3anum\u505a\u4e3atest\u51fd\u6570\u5185\u90e8\uff0c\u53ea\u80fd\u5728test\u5185\u90e8\u88ab\u8bbf\u95ee\u3002\u4ee5\u4e0b\u7a0b\u5e8f\u662f\u6b63\u786e\u7684\u3002

int *test()
{
static int num = 100;
int *ptr = #
return ptr;
}

int main()
{
printf("%d\n", *test);
return 0;
}

\u8be5\u7a0b\u5e8f\u4e2dnum\u53d8\u91cf\u52a0\u4e86\u5173\u952e\u5b57static\uff0c\u51fd\u6570\u8fd0\u884c\u7ed3\u675f\u540e\uff0c\u4f9d\u7136\u53ef\u4ee5\u5728\u5176\u4ed6\u5730\u65b9\u88ab\u5f15\u7528\uff0c\u53ea\u662f\u4e0d\u80fd\u76f4\u63a5\u901a\u8fc7\u53d8\u91cf\u540d\u8bbf\u95ee\uff0c\u800c\u8981\u95f4\u63a5\u901a\u8fc7\u6307\u9488\u8bbf\u95ee\uff0c\u539f\u56e0\u662f static\u53d8\u91cf\u5b58\u50a8\u5728\u5168\u5c40\u6570\u636e\u6bb5\u4e2d\u800c\u4e0d\u662f\u51fd\u6570\u6808\u4e2d\u3002\u8bfb\u8005\u53ef\u4ee5\u5c06\u5b83\u770b\u4f5c\u7279\u6b8a\u7684\u5168\u5c40\u53d8\u91cf\uff0c\u53ea\u662f\u5176\u4ed6\u5730\u65b9\u53ea\u80fd\u901a\u8fc7\u6307\u9488\u6765\u8bbf\u95ee\uff0c\u800c\u4e0d\u80fd\u76f4\u63a5\u901a\u8fc7\u53d8\u91cf\u540d\u8bbf\u95ee\u3002

\u653e\u5728\u51fd\u6570\u5185\u90e8\u7684static\u53d8\u91cf\u4e92\u76f8\u4e0d\u4f1a\u5f71\u54cd\uff0c\u4e24\u4e2astatic\u53d8\u91cf\u662f\u5206\u522b\u72ec\u7acb\u5b58\u5728\u7684\u3002
\u5982\u679c\u60a8\u9700\u8981\u5b83\u4eec\u4e92\u76f8\u5f71\u54cd\uff0c\u90a3\u4e48\u5e94\u8be5\u5b9a\u4e49\u4e3a\u5168\u5c40\u7684\uff0c\u653e\u5728\u51fd\u6570\u4e4b\u5916\u3002

下面是C++中static的用法,C语中类似,只是没有不用管与类相关的.

C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static。前者应用于普通变量和函数,不涉及类;后者主要说明static在类中的作用。

一、面向过程设计中的static

1、静态全局变量

在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量。我们先举一个静态全局变量的例子,如下:

//Example 1#include <iostream.h>void fn();static int n; //定义静态全局变量void main(){ n=20; cout<<n<<endl; fn();}void fn(){ n++; cout<<n<<endl;}
静态全局变量有以下特点:
该变量在全局数据区分配内存;
未经初始化的静态全局变量会被程序自动初始化为0(自动变量的值是随机的,除非它被显式初始化);
静态全局变量在声明它的整个文件都是可见的,而在文件之外是不可见的;
静态变量都在全局数据区分配内存,包括后面将要提到的静态局部变量。对于一个完整的程序,在内存中的分布情况如下图:
代码区
全局数据区
堆区
栈区

一般程序的由new产生的动态数据存放在堆区,函数内部的自动变量存放在栈区。自动变量一般会随着函数的退出而释放空间,静态数据(即使是函数内部的静 态局部变量)也存放在全局数据区。全局数据区的数据并不会因为函数的退出而释放空间。细心的读者可能会发现,Example 1中的代码中将

static int n; //定义静态全局变量
改为
int n; //定义全局变量
程序照样正常运行。
的确,定义全局变量就可以实现变量在文件中的共享,但定义静态全局变量还有以下好处:
静态全局变量不能被其它文件所用;
其它文件中可以定义相同名字的变量,不会发生冲突;
您可以将上述示例代码改为如下:

//Example 2//File1#include <iostream.h>void fn();static int n; //定义静态全局变量void main(){ n=20; cout<<n<<endl; fn();}//File2#include <iostream.h>extern int n;void fn(){ n++; cout<<n<<endl;}
编译并运行Example 2,您就会发现上述代码可以分别通过编译,但运行时出现错误。 试着将
static int n; //定义静态全局变量
改为
int n; //定义全局变量
再次编译运行程序,细心体会全局变量和静态全局变量的区别。
2、静态局部变量

在局部变量前,加上关键字static,该变量就被定义成为一个静态局部变量。

我们先举一个静态局部变量的例子,如下:

//Example 3#include <iostream.h>void fn();void main(){ fn(); fn(); fn();}void fn(){ static n=10; cout<<n<<endl; n++;}
通常,在函数体内定义了一个变量,每当程序运行到该语句时都会给该局部变量分配栈内存。但随着程序退出函数体,系统就会收回栈内存,局部变量也相应失效。
但有时候我们需要在两次调用之间对变量的值进行保存。通常的想法是定义一个全局变量来实现。但这样一来,变量已经不再属于函数本身了,不再仅受函数的控制,给程序的维护带来不便。
静态局部变量正好可以解决这个问题。静态局部变量保存在全局数据区,而不是保存在栈中,每次的值保持到下一次调用,直到下次赋新值。
静态局部变量有以下特点:

该变量在全局数据区分配内存;
静态局部变量在程序执行到该对象的声明处时被首次初始化,即以后的函数调用不再进行初始化;
静态局部变量一般在声明处初始化,如果没有显式初始化,会被程序自动初始化为0;
它始终驻留在全局数据区,直到程序运行结束。但其作用域为局部作用域,当定义它的函数或语句块结束时,其作用域随之结束;
3、静态函数

在函数的返回类型前加上static关键字,函数即被定义为静态函数。静态函数与普通函数不同,它只能在声明它的文件当中可见,不能被其它文件使用。

静态函数的例子:

//Example 4#include <iostream.h>static void fn();//声明静态函数void main(){ fn();}void fn()//定义静态函数{ int n=10; cout<<n<<endl;}
定义静态函数的好处:
静态函数不能被其它文件所用;
其它文件中可以定义相同名字的函数,不会发生冲突;
二、面向对象的static关键字(类中的static关键字)

1、静态数据成员

在类内数据成员的声明前加上关键字static,该数据成员就是类内的静态数据成员。先举一个静态数据成员的例子。

//Example 5#include <iostream.h>class Myclass{public: Myclass(int a,int b,int c); void GetSum();private: int a,b,c; static int Sum;//声明静态数据成员};int Myclass::Sum=0;//定义并初始化静态数据成员Myclass::Myclass(int a,int b,int c){ this->a=a; this->b=b; this->c=c; Sum+=a+b+c;}void Myclass::GetSum(){ cout<<"Sum="<<Sum<<endl;}void main(){ Myclass M(1,2,3); M.GetSum(); Myclass N(4,5,6); N.GetSum(); M.GetSum();}
可以看出,静态数据成员有以下特点:
对于非静态数据成员,每个类对象都有自己的拷贝。而静态数据成员被当作是类的成员。无论这个类的对象被定义了多少个,静态数据成员在程序中也只有一份拷 贝,由该类型的所有对象共享访问。也就是说,静态数据成员是该类的所有对象所共有的。对该类的多个对象来说,静态数据成员只分配一次内存,供所有对象共 用。所以,静态数据成员的值对每个对象都是一样的,它的值可以更新;
静态数据成员存储在全局数据区。静态数据成员定义时要分配空间,所以不能在类声明中定义。在Example 5中,语句int Myclass::Sum=0;是定义静态数据成员;
静态数据成员和普通数据成员一样遵从public,protected,private访问规则;
因为静态数据成员在全局数据区分配内存,属于本类的所有对象共享,所以,它不属于特定的类对象,在没有产生类对象时其作用域就可见,即在没有产生类的实例时,我们就可以操作它;
静态数据成员初始化与一般数据成员初始化不同。静态数据成员初始化的格式为:
<数据类型><类名>::<静态数据成员名>=<值>
类的静态数据成员有两种访问形式:
<类对象名>.<静态数据成员名> 或 <类类型名>::<静态数据成员名>
如果静态数据成员的访问权限允许的话(即public的成员),可在程序中,按上述格式来引用静态数据成员 ;
静态数据成员主要用在各个对象都有相同的某项属性的时候。比如对于一个存款类,每个实例的利息都是相同的。所以,应该把利息设为存款类的静态数据成员。这 有两个好处,第一,不管定义多少个存款类对象,利息数据成员都共享分配在全局数据区的内存,所以节省存储空间。第二,一旦利息需要改变时,只要改变一次, 则所有存款类对象的利息全改变过来了;
同全局变量相比,使用静态数据成员有两个优势:
静态数据成员没有进入程序的全局名字空间,因此不存在与程序中其它全局名字冲突的可能性;
可以实现信息隐藏。静态数据成员可以是private成员,而全局变量不能;

2、静态成员函数
与静态数据成员一样,我们也可以创建一个静态成员函数,它为类的全部服务而不是为某一个类的具体对象服务。静态成员函数与静态数据成员一样,都是类的内部 实现,属于类定义的一部分。 普通的成员函数一般都隐含了一个this指针,this指针指向类的对象本身,因为普通成员函数总是具体的属于某个类的具体对象的。通常情况下,this 是缺省的。如函数fn()实际上是this->fn()。但是与普通函数相比,静态成员函数由于不是与任何的对象相联系,因此它不具有this指 针。从这个意义上讲,它无法访问属于类对象的非静态数据成员,也无法访问非静态成员函数,它只能调用其余的静态成员函数。 下面举个静态成员函数的例子。

//Example 6#include <iostream.h>class Myclass{public: Myclass(int a,int b,int c); static void GetSum();/声明静态成员函数private: int a,b,c; static int Sum;//声明静态数据成员};int Myclass::Sum=0;//定义并初始化静态数据成员Myclass::Myclass(int a,int b,int c){ this->a=a; this->b=b; this->c=c; Sum+=a+b+c; //非静态成员函数可以访问静态数据成员}void Myclass::GetSum() //静态成员函数的实现{// cout<<a<<endl; //错误代码,a是非静态数据成员 cout<<"Sum="<<Sum<<endl;}void main(){ Myclass M(1,2,3); M.GetSum(); Myclass N(4,5,6); N.GetSum(); Myclass::GetSum();}

关于静态成员函数,可以总结为以下几点:
出现在类体外的函数定义不能指定关键字static;
静态成员之间可以相互访问,包括静态成员函数访问静态数据成员和访问静态成员函数;
非静态成员函数可以任意地访问静态成员函数和静态数据成员;
静态成员函数不能访问非静态成员函数和非静态数据成员;
由于没有this指针的额外开销,因此静态成员函数与类的全局函数相比速度上会有少许的增长;
调用静态成员函数,可以用成员访问操作符(.)和(->)为一个类的对象或指向类对象的指针调用静态成员函数,也可以直接使用如下格式:
<类名>::<静态成员函数名>(<参数表>)
调用类的静态成员函数。

#include"T1.h"
#include<iostream>
using namespace std;
int* Static();
static int Sta=100;
int Show();
int Le=1;
int main(int argc,char *argv[])
{
int Sh=0;
Sh=Show(); //10 返回的是静态变量L的值.
cout<<Sh<<endl;
Sh=Show(); //20 同上.同样的调用却不同的返回值,就是因为静态变量.
cout<<Sh<<endl;
int *p=0;
cout<<&Le<<endl;
p=Static();
cout<<"*p = "<<*p<<endl;
cout<<p<<endl;
/* cout<<Len<<endl; */
/*这句无法通过编译,因为Len这个变量的名字的作用域只是在Static()这个函数中,
过了这个函数就被立即销毁,其内部实现应该是一个栈元素弹出的操作,但它所代表的那块堆内存却因为是
static 全局静态变量,存储于应用程序的堆中而得到永生,这个变量占用的地盘只有在程
序结束,由系统自动收回,别无他法..*/
Show();
cin.get();
}
int* Static()
{
static int Len=0;
/*如果直接使用int Len=0,将无法通过编译,因为int Len=0;申请的是局部变量,
保存在栈中,函数返回后将被删除,而static int Len=0;申请的变量是
保存在全局内存区上*/
cout<<"Len = "<<Len<<endl;
cout<<&Len<<endl;
return &Len; /*这里返回的必须是永远存在的内存区域,否则报错*/
}
int Show()
{
static int L=0; //只会被定义一次;
L=L+10;
return L;
};

关键字static的作用是什么?
这个简单的问题很少有人能回答完全。在C语言中,关键字static有三个明显的作用:
•; 在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。
•; 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。
•; 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。

例子可以参考我的下面URL

  • static鍦c璇█涓殑鐢ㄦ硶
    绛旓細static鍦╟璇█涓槸绉佹湁銆侀潤鎬佹剰鎬銆傜敤浜庡湪鍑芥暟涓0鏄庘滈潤鎬佸彉閲忊濈敤锛屽湪姣忎竴娆¤皟鐢ㄥ悗锛岃鍙橀噺骞朵笉鍦ㄥ嚱鏁拌繑鍥炴椂绔嬪嵆閲婃斁锛屽彉閲忎腑淇濆瓨鐨勫硷紝鍙互淇濈暀鍒颁笅涓娆¤皟鐢ㄦ椂缁х画鏈夋晥銆傜鏈夊氨鏄殣钘忋俿tatic鍑芥暟鍙兘澹版槑鍚庣殑鏈枃涓皟鐢ㄣ俿tatic鍏ㄥ眬鍙橀噺鍙兘澹版槑鍚庣殑鏈枃涓皟鐢ㄣ俿tatic灞閮ㄥ彉閲忓彧鑳藉0鏄庡悗鐨勬湰鍑芥暟璋冪敤 闈欐...
  • static鍦c璇█涓殑鐢ㄦ硶
    绛旓細static鍦╟璇█涓殑鐢ㄦ硶鏈変笁涓細闅愯棌銆佷繚鎸佸彉閲忓唴瀹圭殑鎸佷箙銆侀粯璁ゅ垵濮嬪寲涓0銆備竴銆侀殣钘 褰撴垜浠悓鏃剁紪璇戝涓枃浠舵椂锛屾墍鏈夋湭鍔爏tatic鍓嶇紑鐨勫叏灞鍙橀噺鍜屽嚱鏁伴兘鍏锋湁鍏ㄥ眬鍙鎬с備簩銆佷繚鎸佸彉閲忓唴瀹圭殑鎸佷箙 瀛樺偍鍦ㄩ潤鎬佹暟鎹尯鐨勫彉閲忎細鍦ㄧ▼搴忓垰寮濮嬭繍琛屾椂灏卞畬鎴愬垵濮嬪寲锛屼篃鏄敮涓鐨勪竴娆″垵濮嬪寲銆傚叡鏈変袱绉嶅彉閲忓瓨鍌ㄥ湪闈欐佸瓨鍌...
  • static鍦c璇█涓殑鐢ㄦ硶
    绛旓細鍦–璇█涓紝static鍏抽敭瀛楁嫢鏈変赴瀵岀殑鐢ㄦ硶銆鍦ㄥ嚱鏁颁腑浣跨敤static鍙互閬垮厤鍑芥暟鍚屽悕鍐茬獊鐨勯棶棰橈紝鎻愰珮绋嬪簭鎵ц鏁堢巼锛涘湪鍙橀噺涓娇鐢╯tatic鍙互鏀瑰彉鍙橀噺鐨勭敓鍛藉懆鏈熷拰浣滅敤鍩锛屾柟渚垮湪鍑芥暟涓瓨鍌ㄧ姸鎬佷俊鎭紱鍦ㄥ叏灞鍙橀噺鎴栧嚱鏁板墠鍔犱笂static鍏抽敭瀛楀彲浠ラ伩鍏嶄笉鍚屾枃浠跺唴鐨勫悓鍚嶅嚱鏁版垨鍙橀噺鍙戠敓鍐茬獊锛屽悓鏃朵篃閬垮厤浜嗗叏灞鍙橀噺姹℃煋闂銆傜浉淇...
  • C璇█涓璼tatic鏄仛浠涔堢敤鐨?
    绛旓細鏈変袱绉嶇敤娉曪細1銆乻tatic淇グ灞閮ㄥ彉閲忥紝鎴愪负涓涓眬閮ㄩ潤鎬佸彉閲銆俿tatic淇グ灞閮ㄥ彉閲(闈欐佸眬閮ㄥ彉閲)涓庢櫘閫氬眬閮ㄥ彉閲忕浉姣旓紝瀹冪殑浼樺娍鍦ㄤ簬锛氣憼闈欐佸眬閮ㄥ彉閲忎綔鐢ㄥ煙涓庤繛鎺ュ睘鎬т笌鏅氬眬閮ㄥ彉閲忎竴鏍凤紱鈶″瓨鍌ㄧ被锛氶潤鎬佸眬閮ㄥ彉閲忓垎閰嶅湪data/bss娈碉紝鏅氬眬閮ㄥ彉閲忓湪鏍堜笂锛涒憿鐢熷懡鍛ㄦ湡锛氬洜涓哄瓨鍌ㄧ被鐨勪笉鍚岋紝闈欐佸眬閮ㄥ彉閲忕殑鐢熷懡鍛ㄦ湡寰...
  • C璇█涓璼tatic鍏抽敭瀛楃殑浣滅敤鏄粈涔?
    绛旓細鍦–璇█涓紝static鍏抽敭瀛楃殑浣滅敤濡備笅锛1銆佸湪淇グ鍙橀噺鐨勬椂锛宻tatic淇グ鐨勯潤鎬佸眬閮ㄥ彉閲忓彧鎵ц涓娆★紝鑰屼笖寤堕暱浜嗗眬閮ㄥ彉閲忕殑鐢熷懡鍛ㄦ湡锛岀洿鍒扮▼搴忚繍琛岀粨鏉熶互鍚庢墠閲婃斁銆2銆乻tatic淇グ鍏ㄥ眬鍙橀噺鐨勬椂锛岃繖涓叏灞鍙橀噺鍙兘鍦ㄦ湰鏂囦欢涓闂紝涓嶈兘鍦ㄥ叾瀹冩枃浠朵腑璁块棶锛屽嵆渚挎槸extern澶栭儴澹版槑涔熶笉鍙互銆3銆乻tatic淇グ涓涓嚱鏁帮紝鍒欒繖涓...
  • c璇█涓璼tatic鏄粈涔堟剰鎬(static鍦╟璇█涓槸浠涔堟剰鎬濇槸鐢ㄤ粈涔堣緭鍑)_鐧 ...
    绛旓細static鍦c璇█涓殑鐢ㄦ硶 鍦C璇█涓紝static鍏抽敭瀛椾笉浠呭彲浠ョ敤鏉ヤ慨楗板彉閲忥紝杩樺彲浠ョ敤鏉ヤ慨楗板嚱鏁般傚湪浣跨敤static鍏抽敭瀛椾慨楗板彉閲忔椂锛屾垜浠О姝ゅ彉閲忎负闈欐佸彉閲忋傞潤鎬佸彉閲忕殑瀛樺偍鏂瑰紡涓庡叏灞鍙橀噺涓鏍凤紝閮芥槸闈欐佸瓨鍌ㄦ柟寮忋備絾杩欓噷闇瑕佺壒鍒鏄庣殑鏄紝闈欐佸彉閲忓睘浜庨潤鎬佸瓨鍌ㄦ柟寮忥紝灞炰簬闈欐佸瓨鍌ㄦ柟寮忕殑鍙橀噺鍗翠笉涓瀹氬氨鏄潤鎬佸彉閲忋
  • c璇█鐨剆tatic浠涔堟剰鎬
    绛旓細鍦C璇█涓锛宻tatic鏄竴涓叧閿瓧锛屽畠鏈夊绉嶅惈涔夊拰鐢ㄦ硶锛鍏蜂綋鍙栧喅浜庡畠鍦ㄥ摢閲屽拰濡備綍琚娇鐢ㄣ備互涓嬫槸static鐨涓昏鐢ㄦ硶锛氶潤鎬佸眬閮ㄥ彉閲忥細c`void func() {static int count = 0;count++;printf("%d\n", count);}`姣忔璋冪敤func()鏃讹紝count鐨勫奸兘浼氬鍔狅紝鍥犱负count鐨勭敓鍛藉懆鏈熷湪鍑芥暟璋冪敤涔嬮棿鎸佺画瀛樺湪銆傚綋...
  • c璇█static鍏抽敭瀛鐨浣滅敤
    绛旓細c璇█static鍏抽敭瀛楃殑浣滅敤鏄粈涔堬紵璁╂垜浠竴璧蜂簡瑙d竴涓嬪惂锛1銆佷慨楗板彉閲 鍏ㄥ眬鍙橀噺鍓嶅姞static淇グ锛璇ュ彉閲忓氨鎴愪负浜嗛潤鎬佸叏灞鍙橀噺銆傚叏閮ㄥ彉閲忓湪鏁翠釜宸ョ▼閮藉彲浠ヨ璁块棶锛堜竴涓枃浠朵腑瀹氫箟锛屽叾瀹冩枃浠朵娇鐢ㄧ殑鏃跺欐坊鍔爀xtern鍏抽敭瀛楀0鏄 锛夛紝鑰屽湪娣诲姞浜唖tatic鍏抽敭瀛椾箣鍚庯紝杩欎釜鍙橀噺灏卞彧鑳藉湪鏈枃浠跺唴琚闂簡銆傚洜姝わ紝鍦ㄨ繖閲岋紝...
  • C璇█static鐨勭敤娉?
    绛旓細static 鍨嬪彉閲忓彧鍒濆鍖栦竴娆★紝绗竴娆¤皟鐢╢un鍑芥暟鏃讹紝f鍒濆鍖栦负1锛岃繍琛屽畬鍚巉浠嶄负1锛涚浜屾璋冪敤鏃秄鐨鍊艰繕鏄1锛屼笉鍐嶅垵濮嬪寲锛屼簬鏄痜鍦╢un杩愯瀹屽悗鍙樹负2锛岃繖鏍蜂緷娆″畬鎴愭墍鏈夊惊鐜紝姣忔璁$畻f鏃讹紝閮芥部鐢ㄤ笂涓涓惊鐜殑f鍊
  • c璇█涓璼tatic鍏抽敭瀛
    绛旓細C++闈㈠悜杩囩▼鐨剆tatic鍜孋鐨勬槸涓鏍风殑銆 C++鐨剆tatic鏈変袱绉嶇敤娉曪細闈㈠悜杩囩▼绋嬪簭璁捐涓殑static鍜岄潰鍚戝璞$▼搴忚璁′腑鐨剆tatic銆傚墠鑰呭簲鐢ㄤ簬鏅氬彉閲忓拰鍑芥暟锛屼笉娑夊強绫伙紱鍚庤呬富瑕佽鏄巗tatic鍦ㄧ被涓殑浣滅敤銆備竴銆侀潰鍚戣繃绋嬭璁′腑鐨剆tatic 1銆侀潤鎬佸叏灞鍙橀噺 鍦ㄥ叏灞鍙橀噺鍓嶏紝鍔犱笂鍏抽敭瀛梥tatic锛岃鍙橀噺灏辫瀹氫箟鎴愪负涓涓潤鎬...
  • 扩展阅读:static int的值会变吗 ... static在c++语言中的用法 ... static关键字的5种用法 ... c语言static的用法举例 ... c语言static经典例子 ... c语言static int的用法 ... public static void main ... 简述static关键字的用法 ... c语言static有什么用 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网