c语言:static问题 在C语言中static有什么含义

c\u8bed\u8a00\u4e2dstatic\u8bf4\u660e\u662f\u4ec0\u4e48\u610f\u601d?

\u5728C\u8bed\u8a00\u4e2d\uff0cstatic\u5173\u952e\u5b57\u7684\u4f5c\u7528\u5982\u4e0b\uff1a
1\u3001\u5728\u4fee\u9970\u53d8\u91cf\u7684\u65f6\uff0cstatic\u4fee\u9970\u7684\u9759\u6001\u5c40\u90e8\u53d8\u91cf\u53ea\u6267\u884c\u4e00\u6b21\uff0c\u800c\u4e14\u5ef6\u957f\u4e86\u5c40\u90e8\u53d8\u91cf\u7684\u751f\u547d\u5468\u671f\uff0c\u76f4\u5230\u7a0b\u5e8f\u8fd0\u884c\u7ed3\u675f\u4ee5\u540e\u624d\u91ca\u653e\u3002
2\u3001static\u4fee\u9970\u5168\u5c40\u53d8\u91cf\u7684\u65f6\uff0c\u8fd9\u4e2a\u5168\u5c40\u53d8\u91cf\u53ea\u80fd\u5728\u672c\u6587\u4ef6\u4e2d\u8bbf\u95ee\uff0c\u4e0d\u80fd\u5728\u5176\u5b83\u6587\u4ef6\u4e2d\u8bbf\u95ee\uff0c\u5373\u4fbf\u662fextern\u5916\u90e8\u58f0\u660e\u4e5f\u4e0d\u53ef\u4ee5\u3002
3\u3001static\u4fee\u9970\u4e00\u4e2a\u51fd\u6570\uff0c\u5219\u8fd9\u4e2a\u51fd\u6570\u7684\u53ea\u80fd\u5728\u672c\u6587\u4ef6\u4e2d\u8c03\u7528\uff0c\u4e0d\u80fd\u88ab\u5176\u4ed6\u6587\u4ef6\u8c03\u7528\u3002Static\u4fee\u9970\u7684\u5c40\u90e8\u53d8\u91cf\u5b58\u653e\u5728\u5168\u5c40\u6570\u636e\u533a\u7684\u9759\u6001\u53d8\u91cf\u533a\u3002

\u6269\u5c55\u8d44\u6599:
static\u5173\u952e\u5b57\u5728C\u8bed\u8a00\u3001C++\u3001java\u4e2d\u7684\u4f5c\u7528\u6709\u7740\u76f8\u4f3c\u4e4b\u5904\uff0c\u4f46\u4e5f\u5b58\u5728\u5dee\u5f02\uff1a
\u4e00\u3001C++\u7684static\u7528\u6cd5\uff1a
1\u3001\u9762\u5411\u8fc7\u7a0b\u7a0b\u5e8f\u8bbe\u8ba1\u4e2d\u7684static\u548c\u9762\u5411\u5bf9\u8c61\u7a0b\u5e8f\u8bbe\u8ba1\u4e2d\u7684static\u3002\u524d\u8005\u5e94\u7528\u4e8e\u666e\u901a\u53d8\u91cf\u548c\u51fd\u6570\uff0c\u4e0d\u6d89\u53ca\u7c7b\uff1b\u540e\u8005\u4e3b\u8981\u8bf4\u660estatic\u5728\u7c7b\u4e2d\u7684\u4f5c\u7528\u3002
2\u3001\u5728\u7c7b\u4e2d\uff0cstatic\u53ef\u4ee5\u7528\u6765\u4fee\u9970\u9759\u6001\u6570\u636e\u6210\u5458\u548c\u9759\u6001\u6210\u5458\u65b9\u6cd5
\u9759\u6001\u6570\u636e\u6210\u5458
\uff081\uff09\u9759\u6001\u6570\u636e\u6210\u5458\u53ef\u4ee5\u5b9e\u73b0\u591a\u4e2a\u5bf9\u8c61\u4e4b\u95f4\u7684\u6570\u636e\u5171\u4eab\uff0c\u5b83\u662f\u7c7b\u7684\u6240\u6709\u5bf9\u8c61\u7684\u5171\u4eab\u6210\u5458\uff0c\u5b83\u5728\u5185\u5b58\u4e2d\u53ea\u5360\u4e00\u4efd\u7a7a\u95f4\uff0c\u5982\u679c\u6539\u53d8\u5b83\u7684\u503c\uff0c\u5219\u5404\u5bf9\u8c61\u4e2d\u8fd9\u4e2a\u6570\u636e\u6210\u5458\u7684\u503c\u90fd\u88ab\u6539\u53d8\u3002
\uff082\uff09\u9759\u6001\u6570\u636e\u6210\u5458\u662f\u5728\u7a0b\u5e8f\u5f00\u59cb\u8fd0\u884c\u65f6\u88ab\u5206\u914d\u7a7a\u95f4\uff0c\u5230\u7a0b\u5e8f\u7ed3\u675f\u4e4b\u540e\u624d\u91ca\u653e\uff0c\u53ea\u8981\u7c7b\u4e2d\u6307\u5b9a\u4e86\u9759\u6001\u6570\u636e\u6210\u5458\uff0c\u5373\u4f7f\u4e0d\u5b9a\u4e49\u5bf9\u8c61\uff0c\u4e5f\u4f1a\u4e3a\u9759\u6001\u6570\u636e\u6210\u5458\u5206\u914d\u7a7a\u95f4\u3002
\uff083\uff09\u9759\u6001\u6570\u636e\u6210\u5458\u65e2\u53ef\u4ee5\u901a\u8fc7\u5bf9\u8c61\u540d\u5f15\u7528\uff0c\u4e5f\u53ef\u4ee5\u901a\u8fc7\u7c7b\u540d\u5f15\u7528\u3002
\u9759\u6001\u6210\u5458\u51fd\u6570
\uff081\uff09\u9759\u6001\u6210\u5458\u51fd\u6570\u548c\u9759\u6001\u6570\u636e\u6210\u5458\u4e00\u6837\uff0c\u4ed6\u4eec\u90fd\u5c5e\u4e8e\u7c7b\u7684\u9759\u6001\u6210\u5458\uff0c\u800c\u4e0d\u662f\u5bf9\u8c61\u6210\u5458\u3002
\uff082\uff09\u975e\u9759\u6001\u6210\u5458\u51fd\u6570\u6709this\u6307\u9488\uff0c\u800c\u9759\u6001\u6210\u5458\u51fd\u6570\u6ca1\u6709this\u6307\u9488\u3002
\uff083\uff09\u9759\u6001\u6210\u5458\u51fd\u6570\u4e3b\u8981\u7528\u6765\u65b9\u4f4d\u9759\u6001\u6570\u636e\u6210\u5458\u800c\u4e0d\u80fd\u8bbf\u95ee\u975e\u9759\u6001\u6210\u5458\u3002
\u4e8c\u3001java\u7684static\u7528\u6cd5\uff1a
1\u3001\u58f0\u660e\u4e3astatic\u7684\u53d8\u91cf\u79f0\u4e3a\u9759\u6001\u53d8\u91cf\u6216\u7c7b\u53d8\u91cf\u3002\u53ef\u4ee5\u76f4\u63a5\u901a\u8fc7\u7c7b\u540d\u5f15\u7528\u9759\u6001\u53d8\u91cf\uff0c\u4e5f\u53ef\u4ee5\u901a\u8fc7\u5b9e\u4f8b\u540d\u6765\u5f15\u7528\u9759\u6001\u53d8\u91cf\uff0c\u4f46\u6700\u597d\u91c7\u7528\u524d\u8005\uff0c\u56e0\u4e3a\u540e\u8005\u5bb9\u6613\u6df7\u6dc6\u9759\u6001\u53d8\u91cf\u548c\u4e00\u822c\u53d8\u91cf\u3002
2\u3001\u58f0\u660e\u4e3astatic\u7684\u65b9\u6cd5\u79f0\u4e3a\u9759\u6001\u65b9\u6cd5\u6216\u7c7b\u65b9\u6cd5\u3002\u9759\u6001\u65b9\u6cd5\u53ef\u4ee5\u76f4\u63a5\u8c03\u7528\u9759\u6001\u65b9\u6cd5\uff0c\u8bbf\u95ee\u9759\u6001\u53d8\u91cf\uff0c\u4f46\u662f\u4e0d\u80fd\u76f4\u63a5\u8bbf\u95ee\u5b9e\u4f8b\u53d8\u91cf\u548c\u5b9e\u4f8b\u65b9\u6cd5\u3002\u9759\u6001\u65b9\u6cd5\u4e2d\u4e0d\u80fd\u4f7f\u7528this\u5173\u952e\u5b57\uff0c\u56e0\u4e3a\u9759\u6001\u65b9\u6cd5\u4e0d\u5c5e\u4e8e\u4efb\u4f55\u4e00\u4e2a\u5b9e\u4f8b\u3002
\u53c2\u8003\u8d44\u6599\u6765\u6e90\uff1a\u767e\u5ea6\u767e\u79d1-static\uff08\u8ba1\u7b97\u673a\u9ad8\u7ea7\u8bed\u8a00\uff09

\u662f\u4e0d\u6b62\u4e00\u4e2a\u610f\u601d\uff0c\u8981\u770b\u7528\u5230\u54ea\u91cc\u3002\u6bd4\u5982\uff1a
static int a;
int b;
void func(void)
{
static int c;
int d;
}
\u5728\u8fd9\u91cc\uff0ca\u4e0eb\u90fd\u662f\u5168\u5c40\u53d8\u91cf\uff0c\u4e8c\u8005\u7684\u533a\u522b\u662f\uff0cb\u53ef\u4ee5\u88ab\u522b\u7684\u6587\u4ef6\u4f7f\u7528\uff0ca\u53ea\u80fd\u5728\u672c\u6587\u4ef6\u4e2d\u4f7f\u7528\uff0c\u8fd9\u662fstatic\u5bf9\u5168\u5c40\u53d8\u91cf\u7684\u4f5c\u7528\u3002
c\u548cd\u7684\u533a\u522b\u662f\uff0cd\u662f\u4e00\u4e2a\u81ea\u52a8\u53d8\u91cf\uff0cfunc\u51fd\u6570\u6267\u884c\u5b8c\u540e\uff0cd\u4f1a\u81ea\u52a8\u88ab\u91ca\u653e\u3002\u4f46c\u5374\u4e0d\u4f1a\u88ab\u91ca\u653e\uff0c\u4e0b\u4e00\u6b21\u8c03\u7528func\u51fd\u6570\u65f6\uff0cc\u7684\u503c\u4f1a\u4fdd\u7559\u4e0a\u6b21\u7684\u503c\u7ee7\u7eed\u4f7f\u7528\u3002

一、静态全局变量
全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量是静态存储方式, 静态全局变量也是静态存储方式。 这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序, 当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用, 因此可以避免在其它源文件中引起错误。

二、静态局部变量
static声明的局部变量在调用结束后不消失而保留原值,即其占用存储但愿不释放,在下一次该函数调用时,该变量保留上一次函数调用结束时的值。
只被初始化一次且只能在局部使用。

float func1()
{
static float a = 0;
return a++;
}
float func2()
{
float a = 0;
return a++;
}
int main()
{
for( int i = 0; i < 10; i++ )
cout<< func1() << endl;
for( int j = 0; j < 10; j++ )
cout<< func2() << endl;
return 0;
}
打印结果:func1: 0 1 2 3 4 5 6 7 8 9
func2: 0 0 0 0 0 0 0 0 0 0
且 a只能在func()函数中使用。

static变量最大的作用范围是一个文件,也就是你所说的可防其他文件调用,而你说的局部变量,无论是不是static ,都是只在他的作用域里有效,即模块内有效,虽然他的生存周期是从程序的开始到结束,但其他地方是访问不到的,而全局static变量,整个文件内部所有的代码都是可以访问的到的。定义局部或全局变量就是这一点不同而已。
如果有明白的请补充说明!

大括号可以将代码分段去处理,第一个
{static
int
a=2;}大括号将a做为这个区域的一个局域变量,超出这个区域的a是无效的,故 printf("%d\n",a)的a变量是全局变量;
{static
int
a=2;
printf("%d\n",a);}这个括号将printf("%d\n",a)包含进去,所以打印的是该区域的变量a=2,
最后一个在同个代码块中是不允许定义相同的变量的,故出错~

两种,全局变量和静态类型变量
,static,即在程序运行的过程中静态变量始终是占用一个存储空间。
静态变量只能在他的作用范围内使用,使用局部静态变量是为了在下次调用该函数时,能使用上次调用后得到的该变量的值。
(1)定义格式:
static
数据类型
内部变量表;
(2)存储特点
1)静态内部变量属于静态存储。在程序执行过程中,即使所在函数调用结束也不释放。换句话说,在程序执行期间,静态内部变量始终存在,但
其它函数是不能引用它们的。
2)定义但不初始化,则自动赋以"0"(整型和实型)或'\0'(字符型);且每次调用它们所在的函数时,不再重新赋初值,只是保留上次调用
结束时的值!
(3)何时使用静态内部变量
1)需要保留函数上一次调用结束时的值。
2)变量只被引用而不改变其值。


A
声明为static将把变量存储在静态存储区(全局变量也存储在静态存储区)
B)
全局变量说明为static存储类,其作用域将被缩小到所在的文件
C)
静态变量,全局变量,还有整型数组在未赋初值时期初值为0
D)
二者还是有差别的

  • C璇█涓,鍏朵粬鏂囦欢鍙惁璋冪敤鏂囦欢涓殑static鍑芥暟?
    绛旓細鍐呴儴鍑芥暟涔熺О涓洪潤鎬佸嚱鏁帮紝浣嗘澶勯潤鎬static 鐨勫惈涔夊凡涓嶆槸鎸囧瓨鍌ㄦ柟寮忥紝鑰屾槸鎸囧鍑芥暟鐨勮皟鐢ㄨ寖鍥村彧灞闄愪簬鏈枃浠躲傚閮ㄥ嚱鏁板湪鏁翠釜婧愮▼搴忎腑閮芥湁鏁堬紝鍏跺畾涔夌殑涓鑸舰寮忎负extern 绫诲瀷璇存槑绗 鍑芥暟鍚嶅舰鍙傝〃銆C璇█涓璼tatic鍑芥暟锛屽彧鑳借鏈枃浠朵腑鐨勫嚱鏁版墍浣跨敤锛屽埆鐨刢鏂囦欢涓笉鑳借闂繖涓嚱鏁帮紝鑰屼笖浣犲彲浠ュ湪鍒殑...
  • C璇█static瀹氫箟闈欐佸彉閲,涓嶅お鎳,璇疯В閲婁竴涓
    绛旓細static c = 3; 鍙垵濮嬪寲涓娆★紝鍚庨潰鍐嶄娇鐢╟灏辨槸鐢ㄤ笂娆()杩斿洖鍚巆鐨勭粨鏋 鎵浠ュ綋i=0鏃讹紝f()涓璦=2锛宑鍒濆鍖栦负3锛宑=c+1鍚巆=4锛岃繑鍥瀉+c=4+2=6銆傝繑鍥炲悗c淇濇寔涓4 褰搃=1鏃讹紝f()涓璦=2锛宑鍒濆鍊间负涓婃杩斿洖鍚庣殑缁撴灉4锛屼粠鑰宑=c+1=5锛屽嚱鏁拌繑鍥瀉+c=2+5=7銆傝繑鍥炲悗c淇濇寔涓5銆傚綋i=...
  • C璇█涓 鍏朵粬鏂囦欢鍙惁璋冪敤鏂囦欢涓殑static鍑芥暟?
    绛旓細涓嶈兘銆C璇█涓殑static鍑芥暟锛氬唴閮ㄥ嚱鏁板拰澶栭儴鍑芥暟 鍑芥暟涓鏃﹀畾涔夊悗灏卞彲琚叾瀹冨嚱鏁拌皟鐢ㄣ備絾褰撲竴涓簮绋嬪簭鐢卞涓簮鏂囦欢缁勬垚鏃讹紝鍦ㄤ竴涓簮鏂囦欢涓畾涔夌殑鍑芥暟鑳藉惁琚叾瀹冩簮鏂囦欢涓殑鍑芥暟璋冪敤鍛備负姝わ紝C璇█鍙堟妸鍑芥暟鍒嗕负涓ょ被锛氫竴銆佸唴閮ㄥ嚱鏁 濡傛灉鍦ㄤ竴涓簮鏂囦欢涓畾涔夌殑鍑芥暟鍙兘琚湰鏂囦欢涓殑鍑芥暟璋冪敤锛岃屼笉鑳借鍚屼竴...
  • C璇█涓 鍦ㄤ竴涓嚱鏁颁腑鐢 static淇グ鐨勫彉閲,杩樿兘缁欏畠璧嬩笂鏂板煎悧?_鐧惧害...
    绛旓細鍙互锛static鍦C璇█涓槸琛ㄧず涓涓彉閲忎负闈欐佸彉閲忕殑锛岃屼笉鏄父閲忥紝涔熶笉鏄笉鍙彉鐨勫彉閲忋傛墍璋撶殑闈欐佸彉閲忔湁涓ょ鎯呭喌锛屼竴绉嶆槸闈欐佸叏灞鍙橀噺锛屼竴绉嶆槸闈欐佸眬閮ㄥ彉閲忋傚儚鍦╒B锛孋#锛孋锛孋++锛孞ava锛孭HP锛孫bjective-C锛孞avaScript涓垜浠彲浠ョ湅鍒皊tatic浣滀负鍏抽敭瀛楀拰鍑芥暟鍑虹幇锛屽湪鍏朵粬鐨勯珮绾ц绠楁満璇█濡侳ORTRAN銆丄LGOL銆...
  • C璇█,璇烽棶 濡傛灉涓涓嚱鏁颁腑鎴戝畾涔変竴涓眬閮static瀛楃鏁扮粍,濡傛灉鎴戜笉鍋滅殑...
    绛旓細static闈欐佸彉閲忓垎閰嶅湪鍏ㄥ眬鍙橀噺锛堥潤鎬佸彉閲忥級鍖哄唴锛岃繖鏄湪缂栬瘧鐜妭涓氨浼氱‘瀹氱殑銆傚鏋滃湪绋嬪簭鐨勪竴涓嚱鏁颁腑瀹氫箟涓涓眬閮╯tatic瀛楃鏁扮粍鐨勮瘽锛岄偅涔堣繖涓猻tatic瀛楃鏁扮粍鐨勭敓瀛樻湡鏄暣涓▼搴忚繍琛屾椂鏈燂紝鍗冲湪涓涓▼搴忚繍琛屽懆鏈熷唴锛屽畠浣跨敤鐨勯兘鏄悓涓鍧楀湴鍧鑰屼笖鏄悓涓涓墿鐞嗗湴鍧銆傜▼搴忕粨鏉熷悗锛岃嚜鍔ㄩ噴鏀俱
  • C璇█涓static淇グ鍙橀噺
    绛旓細鍙互锛static鍦C璇█涓槸琛ㄧず涓涓彉閲忎负闈欐佸彉閲忕殑锛岃屼笉鏄父閲忥紝涔熶笉鏄笉鍙彉鐨勫彉閲忋傛墍璋撶殑闈欐佸彉閲忔湁涓ょ鎯呭喌锛屼竴绉嶆槸闈欐佸叏灞鍙橀噺锛屼竴绉嶆槸闈欐佸眬閮ㄥ彉閲忋傚厛璇撮潤鎬佸眬閮ㄥ彉閲忥細閫氬父鎯呭喌涓嬶紝鍦ㄤ竴涓嚱鏁颁腑瀹氫箟涓涓彉閲忥紝閭d箞鍑芥暟閫鍑轰箣鍚庯紝杩欎釜鍙橀噺灏辨秷澶变簡锛屽嵆浣夸綘绗簩娆¤皟鐢ㄨ繖涓嚱鏁帮紝閲岄潰鐨勫彉閲忎篃浼氳...
  • c璇█澶氱骇鎸囬拡闂static int a[][3]={{1,2,3},{4,9},{7}};
    绛旓細锛堟绘劅瑙変綘鎶勯敊棰樹簡锛夌敱a鐨勫畾涔夌煡閬揳鏄3琛岋紝3鍒楁暟缁勩1 2 3 4 9 0 7 0 0 while寰幆锛屾诲叡鎵ц浜3娆★紝鍦ㄥ惊鐜綋鍐卛鐨勫兼槸1,2,3 鍥犱负p鏄竴涓寚閽堟暟缁勶紝鍏朵腑鐨勪笁涓厓绱犲垎鍒寚鍚戜簡a鐨勪笁琛屻傛墍浠[i][j]鍏跺疄灏辨槸a鐨勭i琛岀j鍒 (*(p+i)+i) 琛ㄧず鐨勫氨鏄 a[i][i](*p+i) 琛ㄧず鐨...
  • ...绋嬪簭: #include<stdio.h> int f(int m) { static int n=0; 姹傝瑙...
    绛旓細include<stdio.h>int f(int m){static int n=0; //闈欐佸彉閲忥紝鍙垵濮嬪寲涓娆★紝绗簩娆′负涓婁竴娆$殑鍓╀綑缁撴灉n+=m;return n; //绗竴娆=1 绗簩娆=1,n+=m=2}void main(){int n=0;printf("%d,",f(++n)); //++n锛屽厛鑷锛屽悗璋冪敤n锛岀浉褰撲簬璋冪敤f(1)printf("%d\n",f(n...
  • c璇█涓彉閲忓墠鐨static鏈変粈涔堢敤???
    绛旓細static鍙橀噺澶ф鏄袱绉嶆儏鍐 鍦ㄥ嚱鏁伴噷鐨剆tatic鍙橀噺鎰忓懗鐫杩欎釜鍙橀噺鐨勭敓瀛樻湡鏄叏灞鐨勶紝浣犲彲浠ユ兂璞″畠瀹為檯涓婂氨鏄湪鍑芥暟澶栧0鏄庣殑锛 褰撶劧鍥犱负鍙鑼冨洿鐨勫師鍥犲叾浠栧嚱鏁颁笉鑳借闂畠 鍦ㄥ嚱鏁板鐨剆tatic鍙橀噺鎰忔濇槸鏈湴鐨勶紝 璺熶笉鍔爏tatic鐨勫樊鍒氨鏄叾浠栨枃浠朵笉鑳介氳繃extern鏉ヨ闂繖涓彉閲忋
  • c璇█鑷繁鍐欑殑澶存枃浠堕噷闈㈢殑鍑芥暟瀹氫箟涓轰粈涔堣鍔static?
    绛旓細浣犵殑鍏堝紕鏄庣櫧澶存枃浠惰鍖呭惈浜嗕箣鍚庯紝缂栬瘧鍣ㄤ細鍦ㄥ綋鍓嶆枃浠舵妸浣犲寘鍚殑澶存枃浠跺睍寮锛岃屽綋澶氫簬涓や釜婧愭枃浠跺寘鍚浉鍚岀殑澶存枃浠剁殑鏃跺欙紝濡傛灉涓嶅姞staic鐨勮瘽锛屽ご鏂囦欢涓殑鍚屼竴涓嚱鏁板氨鐩稿綋浜庡湪鏁翠釜绋嬪簭涓瀹氫箟浜嗗娆★紝鎵浠ヨ偗瀹氫細鎶ラ敊銆static浼氭妸瀹冨畾涔変负鏈湴鍑芥暟锛屽皢鍏朵綔鐢ㄥ煙闄愬埗鍦ㄦ湰鏂囦欢鍐咃紝鎵浠ラ渶瑕佸姞涓妔tatic鍏抽敭瀛...
  • 扩展阅读:c语言static的用法 ... c语言static经典例子 ... c语言中static解释 ... c语言static和const的区别 ... c语言static有什么用 ... c语言静态变量static ... 学了python再学c++好学吗 ... c语言strlen函数用法 ... 在c语言中什么意思 static ...

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