c语言中静态变量是怎么用的 C语言里面静态变量static是什么作用啊?

c\u8bed\u8a00\u4e2d\u9759\u6001\u53d8\u91cf\u662f\u600e\u4e48\u7528\u7684

#include"stdio.h"
void
main()
{
int
f(int);
int
a=2,i;
for(i=0;i<3;i++)
printf("%d
",f(a));
}
int
f(int
a)
{
auto
int
b=0;
//aubo\u4e3a\u81ea\u52a8\u53d8\u91cf\u7684\u6807\u5fd7\uff0c\u5219b\u4e3a\u81ea\u52a8\u53d8\u91cf
static
int
c=3;//static
\u4e3a\u9759\u6001\u5c40\u90e8\u53d8\u91cf\u7684\u6807\u5fd7\uff0c\u5219c\u4e3a\u9759\u6001\u5c40\u90e8\u53d8\u91cf
b=b+1;
//b\u4e3a\u81ea\u52a8\u53d8\u91cf,\u5219b\u4e00\u76f4\u7b49\u4e8e1
c=c+1;
//c\u4e3a\u9759\u6001\u5c40\u90e8\u53d8\u91cf\uff0c\u5219c\u968f\u7740for\u5faa\u73af\u5206\u522b\u4e3a4,5,6
return(a+b+c);
}
\u6240\u4ee5\u8fd0\u884c\u7684\u7ed3\u679c\u4e3a\uff1a7\uff0c8,9
\u6ce8\uff1a\u9759\u6001\u5c40\u90e8\u53d8\u91cf\uff08\u9759\u6001\u53d8\u91cf\uff09\u662f\u5728\u7f16\u8bd1\u65f6\u8d4b\u521d\u503c\u7684\uff0c\u5373\u503c\u8d4b\u521d\u503c\u4e00\u6b21\uff0c\u5728\u7a0b\u5e8f\u8fd0\u884c\u65f6\u5b83\u5df2\u6709\u521d\u503c\uff0c\u4ee5\u540e\u6bcf\u6b21\u8c03\u7528\u51fd\u6570\u5f0f\u4e0d\u5728\u91cd\u590d\u8d4b\u521d\u503c\u800c\u53ea\u5728\u4fdd\u7559\u5546\u57ce\u51fd\u6570\u8c03\u7528\u7ed3\u675f\u65f6\u7684\u503c\u3002

static\u5173\u952e\u5b57\u5728C\u8bed\u8a00\u4e2d\u7528\u4e8e\u58f0\u660e\u4e00\u4e2a\u9759\u6001\u7684\u5c40\u90e8\u53d8\u91cf\u3002
\u4f5c\u7528\uff1a
\u6709\u65f6\u5e0c\u671b\u51fd\u6570\u4e2d\u7684\u5c40\u90e8\u53d8\u91cf\u7684\u503c\u5728\u51fd\u6570\u8c03\u7528\u7ed3\u675f\u540e\u4e0d\u6d88\u5931\u800c\u7ee7\u7eed\u4fdd\u7559\u539f\u503c\uff0c\u5373\u5176\u5360\u7528\u7684\u5b58\u50a8\u5355\u5143\u4e0d\u91ca\u653e\uff0c\u5728\u4e0b\u4e00\u6b21\u518d\u8c03\u7528\u8be5\u51fd\u6570\u65f6\uff0c\u8be5\u53d8\u91cf\u5df2\u6709\u503c\uff08\u5c31\u662f\u4e0a\u4e00\u6b21\u51fd\u6570\u8c03\u7528\u7ed3\u675f\u65f6\u7684\u503c\uff09\u3002\u8fd9\u65f6\u5c31\u5e94\u8be5\u6307\u5b9a\u8be5\u5c40\u90e8\u53d8\u91cf\u4e3a\u201c\u9759\u6001\u5c40\u90e8\u53d8\u91cf\u201d\uff0c\u7528\u5173\u952e\u5b57static\u8fdb\u884c\u58f0\u660e\u3002

\u7528\u9759\u6001\u5b58\u50a8\u8981\u591a\u5360\u5185\u5b58\uff08\u957f\u671f\u5360\u7528\u4e0d\u91ca\u653e\uff0c\u800c\u4e0d\u80fd\u50cf\u52a8\u6001\u5b58\u50a8\u90a3\u6837\u4e00\u4e2a\u5b58\u50a8\u5355\u5143\u53ef\u4ee5\u5148\u540e\u4e3a\u591a\u4e2a\u53d8\u91cf\u4f7f\u7528\uff0c\u8282\u7ea6\u5185\u5b58\uff09\uff0c\u800c\u4e14\u964d\u4f4e\u4e86\u7a0b\u5e8f\u7684\u53ef\u8bfb\u6027\uff0c\u56e0\u6b64\u82e5\u975e\u5fc5\u8981\uff0c\u4e0d\u8981\u591a\u7528\u9759\u6001\u5c40\u90e8\u53d8\u91cf\u3002

c语言中静态变量作常量使用,用于存储常数。可用const,constant或final等关键字标识,其值就会在编译时设定,并且无法在运行时改变。编译器通常将静态常量与文本一起置于目标文件的文本区域,而非常量初始化数据则置于数据区;而如若有需要,有些编译器还可选择为其开辟专用区。

对于静态全局变量来说,针对某一源文件的以static声明的文件级变量与函数的作用域只限于文件内(只在文件内可见),也即“内部连接”,因而可以用来限定变量的作用域。

扩展资料:

在函数内以static声明的静态局部变量虽然与自动局部变量的作用域相同(即作用域都只限于函数内),但存储空间是以静态分配而非默认的自动分配方式获取的,因而存储空间所在区域不同。

一般来说,静态分配时存储空间于编译时在程序数据段分配,一次分配全程有效;而自动分配时存储空间则是于调用栈上分配,只在调用时分配与释放,且两次调用间变量值始终保持一致;必须注意,静态局部变量只能初始化一次,这是由编译器来保证实现。



就是全局变量啊,比如如果需要计数然后那个函数需要一次次的被重新利用,那就需要静态变量了啊,静态变量不会因为局部函数被清空而清空而是会一直被保留

静态局部变量(静态变量)是在编译时赋初值的,即值赋初值一次,在程序运行时它已有初值,以后每次调用函数式不在重复赋初值而只在保留商城函数调用结束时的值。

使被调用函数调用结束后,被调用函数中的静态变量不会被释放,并保留上一次调用的值

#include"stdio.h"
void main()
{
int f(int);
int a=2,i;
for(i=0;i<3;i++)
printf("%d ",f(a));
}

int f(int a)
{
auto int b=0; //aubo为自动变量的标志,则b为自动变量
static int c=3;//static 为静态局部变量的标志,则c为静态局部变量
b=b+1; //b为自动变量,则b一直等于1
c=c+1; //c为静态局部变量,则c随着for循环分别为4,5,6
return(a+b+c);
}
所以运行的结果为:7,8,9
注:静态局部变量(静态变量)是在编译时赋初值的,即值赋初值一次,在程序运行时它已有初值,以后每次调用函数式不在重复赋初值而只在保留商城函数调用结束时的值。

  • c璇█涓潤鎬佸彉閲忔槸鎬庝箞鐢ㄧ殑
    绛旓細c璇█涓潤鎬佸彉閲忎綔甯搁噺浣跨敤锛岀敤浜庡瓨鍌ㄥ父鏁銆傚彲鐢╟onst锛宑onstant鎴杅inal绛夊叧閿瓧鏍囪瘑锛屽叾鍊煎氨浼氬湪缂栬瘧鏃惰瀹氾紝骞朵笖鏃犳硶鍦ㄨ繍琛屾椂鏀瑰彉銆傜紪璇戝櫒閫氬父灏嗛潤鎬佸父閲忎笌鏂囨湰涓璧风疆浜庣洰鏍囨枃浠剁殑鏂囨湰鍖哄煙锛岃岄潪甯搁噺鍒濆鍖栨暟鎹垯缃簬鏁版嵁鍖猴紱鑰屽鑻ユ湁闇瑕侊紝鏈変簺缂栬瘧鍣ㄨ繕鍙夋嫨涓哄叾寮杈熶笓鐢ㄥ尯銆傚浜庨潤鎬佸叏灞鍙橀噺鏉ヨ锛岄拡瀵规煇...
  • static鍦c璇█涓殑鐢ㄦ硶
    绛旓細static鍦c璇█涓槸绉佹湁銆侀潤鎬佹剰鎬濄傜敤浜庡湪鍑芥暟涓0鏄庘闈欐佸彉閲鈥濈敤锛屽湪姣忎竴娆¤皟鐢ㄥ悗锛岃鍙橀噺骞朵笉鍦ㄥ嚱鏁拌繑鍥炴椂绔嬪嵆閲婃斁锛屽彉閲忎腑淇濆瓨鐨勫硷紝鍙互淇濈暀鍒颁笅涓娆¤皟鐢ㄦ椂缁х画鏈夋晥銆傜鏈夊氨鏄殣钘忋俿tatic鍑芥暟鍙兘澹版槑鍚庣殑鏈枃涓皟鐢ㄣ俿tatic鍏ㄥ眬鍙橀噺鍙兘澹版槑鍚庣殑鏈枃涓皟鐢ㄣ俿tatic灞閮ㄥ彉閲忓彧鑳藉0鏄庡悗鐨勬湰鍑芥暟璋冪敤 闈欐...
  • c璇█涓潤鎬佸彉閲忔槸鎬庝箞鐢ㄧ殑
    绛旓細b=0;//aubo涓鸿嚜鍔ㄥ彉閲忕殑鏍囧織锛屽垯b涓鸿嚜鍔ㄥ彉閲 static int c=3;//static 涓洪潤鎬佸眬閮ㄥ彉閲忕殑鏍囧織锛屽垯c涓闈欐佸眬閮ㄥ彉閲 b=b+1;//b涓鸿嚜鍔ㄥ彉閲,鍒檅涓鐩寸瓑浜1 c=c+1;//c涓洪潤鎬佸眬閮ㄥ彉閲忥紝鍒檆闅忕潃for寰幆鍒嗗埆涓4,5,6 return(a+b+c);} 鎵浠ヨ繍琛岀殑缁撴灉涓猴細7锛8,9 娉細闈欐佸眬閮ㄥ彉閲忥紙闈欐佸彉閲...
  • C璇█涓璼tatic鏄鍋氫粈涔鐢ㄧ殑?
    绛旓細鏈変袱绉嶇敤娉曪細1銆乻tatic淇グ灞閮ㄥ彉閲忥紝鎴愪负涓涓眬閮ㄩ潤鎬佸彉閲銆俿tatic淇グ灞閮ㄥ彉閲(闈欐佸眬閮ㄥ彉閲)涓庢櫘閫氬眬閮ㄥ彉閲忕浉姣旓紝瀹冪殑浼樺娍鍦ㄤ簬锛氣憼闈欐佸眬閮ㄥ彉閲忎綔鐢ㄥ煙涓庤繛鎺ュ睘鎬т笌鏅氬眬閮ㄥ彉閲忎竴鏍凤紱鈶″瓨鍌ㄧ被锛氶潤鎬佸眬閮ㄥ彉閲忓垎閰嶅湪data/bss娈碉紝鏅氬眬閮ㄥ彉閲忓湪鏍堜笂锛涒憿鐢熷懡鍛ㄦ湡锛氬洜涓哄瓨鍌ㄧ被鐨勪笉鍚岋紝闈欐佸眬閮ㄥ彉閲忕殑鐢熷懡鍛ㄦ湡寰...
  • c璇█涓鑳藉畾涔闈欐佸彉閲鍚?
    绛旓細鍙互锛宻tatic鍦C璇█涓鏄〃绀轰竴涓鍙橀噺涓闈欐佸彉閲忕殑锛岃屼笉鏄父閲忥紝涔熶笉鏄笉鍙彉鐨勫彉閲忋傛墍璋鐨勯潤鎬佸彉閲鏈変袱绉嶆儏鍐碉紝涓绉嶆槸闈欐佸叏灞鍙橀噺锛屼竴绉嶆槸闈欐佸眬閮ㄥ彉閲忋傚儚鍦╒B锛孋#锛孋锛孋++锛孞ava锛孭HP锛孫bjective-C锛孞avaScript涓垜浠彲浠ョ湅鍒皊tatic浣滀负鍏抽敭瀛楀拰鍑芥暟鍑虹幇锛屽湪鍏朵粬鐨勯珮绾ц绠楁満璇█濡侳ORTRAN銆丄LGOL銆...
  • C璇█鍔ㄦ佸彉閲忓拰闈欐佸彉閲忕殑鍖哄埆
    绛旓細闈欐佸叏灞鍙橀噺锛氫綔鐢ㄥ煙涓哄綋鍓嶆枃浠讹紝浠庡畾涔/澹版槑浣嶇疆鍒版枃浠剁粨灏撅紝鐢熷懡鍛ㄦ湡涓轰粠绋嬪簭杩愯鍒扮▼搴忛鍑猴紝鍗宠疮绌挎暣涓繍琛屾椂闂淬傚父閲浣跨敤 闈欐佸彉閲涔熷彲浠ョ敤浜庡瓨鍌ㄥ父鏁般傚叿浣撴潵璇达紝闈欐佸彉閲忥紙鍏ㄥ眬鍙橀噺鍙婃眹缂璇█閲瀹氫箟鐨勭鍙蜂害鍚岋級鍙敤const锛宑onstant鎴杅inal锛堟牴鎹瑷鍐冲畾锛夌瓑鍏抽敭瀛楁爣璇嗭紝杩欐椂鍏跺煎氨浼氬湪缂栬瘧鏃惰瀹氾紝骞朵笖...
  • C璇█ 褰㈠弬 闈欐佸彉閲 锝烇綖锝炴眰鎸囨暀 鎶婂舰鍙傝涓簊tatic鍨 姣忔璋冪敤鍑芥暟...
    绛旓細鑰屾墍璋鐨勯潤鎬鍙槸鐩稿浜巃uto绫诲瀷鑰岃█锛屽洜涓簊tatic鐨勫彉閲鑳藉淇濇寔涓婁竴娆$殑鍊间笉蹇咃紝濡傚湪涓涓惊鐜綋涓畾涔 int i;for (i=0; i<5; i++ ){ static j = 0;j++;printf("%d\n", j);}鍒嗗埆杈撳嚭1 2 3 4 5锛岃屽鏋滄病鏈塻tatic 灏辨槸1 1 1 1 1锛岃嚦浜庡舰鍙備竴鑸粯璁ゆ槸auto绫诲瀷 ...
  • 璇烽棶C璇█涓殑闈欐佸彉閲忔庝箞鐢?
    绛旓細闈欐澶栭儴鍙橀噺鍙檺浜庢湰鏂囦欢鑼冨洿鍐呮湁鏁堬紝涓嶈兘琚叾浠栨枃浠跺紩鐢ㄣ傞潤鎬佸眬閮ㄥ彉閲忓彧鑳借瀹氫箟鍙橀噺鎵鍦ㄧ殑鍑芥暟寮曠敤锛屼笖姣忔璋冪敤姝ゅ嚱鏁扮粨鏉熸椂闈欐佸眬閮ㄥ彉閲忓间繚鐣欙紝浣滀负涓嬫璋冪敤姝ゅ嚱鏁版椂璇鍙橀噺鐨鍒濆笺C鍩虹寰堥噸瑕侊紝璇疯鐪熺爺璇
  • ...瓒婂ソ鍟,璋㈣阿,杩樻湁瀹氫箟鐨勯偅涓闈欐佸彉閲,鍦ㄧ▼搴閲岄潰鐨浣滅敤
    绛旓細闈欐佸彉閲锛氬彧鏈夊湪绋嬪簭缁撴潫鐨勬椂鍊欐墠浼氫粠鍐呭瓨涓噴鏀俱傛湰渚嬩腑锛屽鏋滃鏋滄妸n=1閫鍑篺un锛堬級锛屽綋浣犱笅娆¤繘鍏un锛堬級鐨勬椂鍊欙紝n杩樻槸绛変簬1.鍓嶉潰涓嶈В閲婏紝浠巃 = fun(4 + i);杩涘叆fun锛4锛夛紝寰涓嬭蛋锛宮=4锛宮!=0锛岃繘鍏f锛堬級 锛宯=0 锛宺eturn(fun(m - 2)) ; 缁х画鎵цfun锛2锛夛紝杩涘叆fun锛2锛夛紝m = ...
  • C璇█涓潤鎬佸彉閲涓庡姩鎬佸彉閲忕殑瀹氫箟涓庡尯鍒
    绛旓細1銆佸畾涔変笂锛闈欐佸彉閲姣斿姩鎬佸彉閲忓涓涓叧閿瓧static锛屾瘮濡傦細鍔ㄦ佸彉閲忥細int i;闈欐佸彉閲忥細static int i;2銆佸姩鎬佸彉閲忓湪瀛愮▼搴忎腑锛屾瘡娆¤皟鐢ㄦ椂閮戒細浠庨浂寮濮嬶紝涓嶄細淇濈暀鍘熸湁鏁版嵁锛岄潤鎬佸彉閲忚皟鐢ㄦ椂鍘熸湁鍊间笉浼氬彂鐢熸敼鍙橈紝姣斿锛歮ain(){ int i;for(i=0;i<5;i++)fun();//fun1();} void fun() //...
  • 扩展阅读:扫一扫题目出答案 ... c语言静态变量的例子 ... c语言static的用法 ... c语言静态变量的特点 ... c语言静态变量有哪些 ... c语言中strcpy的用法 ... c语言静态变量生存期 ... c语言静态变量初始化 ... c语言静态局部变量是什么 ...

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