C语言中关于static的问题

c\u8bed\u8a00\u4e2dstatic\u95ee\u9898

\u4e24\u79cd\uff0c\u5168\u5c40\u53d8\u91cf\u548c\u9759\u6001\u7c7b\u578b\u53d8\u91cf \uff0cstatic\uff0c\u5373\u5728\u7a0b\u5e8f\u8fd0\u884c\u7684\u8fc7\u7a0b\u4e2d\u9759\u6001\u53d8\u91cf\u59cb\u7ec8\u662f\u5360\u7528\u4e00\u4e2a\u5b58\u50a8\u7a7a\u95f4\u3002

\u9759\u6001\u53d8\u91cf\u53ea\u80fd\u5728\u4ed6\u7684\u4f5c\u7528\u8303\u56f4\u5185\u4f7f\u7528\uff0c\u4f7f\u7528\u5c40\u90e8\u9759\u6001\u53d8\u91cf\u662f\u4e3a\u4e86\u5728\u4e0b\u6b21\u8c03\u7528\u8be5\u51fd\u6570\u65f6\uff0c\u80fd\u4f7f\u7528\u4e0a\u6b21\u8c03\u7528\u540e\u5f97\u5230\u7684\u8be5\u53d8\u91cf\u7684\u503c\u3002

\uff081\uff09\u5b9a\u4e49\u683c\u5f0f\uff1a static \u6570\u636e\u7c7b\u578b \u5185\u90e8\u53d8\u91cf\u8868\uff1b
\uff082\uff09\u5b58\u50a8\u7279\u70b9
1\uff09\u9759\u6001\u5185\u90e8\u53d8\u91cf\u5c5e\u4e8e\u9759\u6001\u5b58\u50a8\u3002\u5728\u7a0b\u5e8f\u6267\u884c\u8fc7\u7a0b\u4e2d\uff0c\u5373\u4f7f\u6240\u5728\u51fd\u6570\u8c03\u7528\u7ed3\u675f\u4e5f\u4e0d\u91ca\u653e\u3002\u6362\u53e5\u8bdd\u8bf4\uff0c\u5728\u7a0b\u5e8f\u6267\u884c\u671f\u95f4\uff0c\u9759\u6001\u5185\u90e8\u53d8\u91cf\u59cb\u7ec8\u5b58\u5728\uff0c\u4f46 \u5176\u5b83\u51fd\u6570\u662f\u4e0d\u80fd\u5f15\u7528\u5b83\u4eec\u7684\u3002
2\uff09\u5b9a\u4e49\u4f46\u4e0d\u521d\u59cb\u5316\uff0c\u5219\u81ea\u52a8\u8d4b\u4ee5"0"\uff08\u6574\u578b\u548c\u5b9e\u578b\uff09\u6216'\0'\uff08\u5b57\u7b26\u578b\uff09\uff1b\u4e14\u6bcf\u6b21\u8c03\u7528\u5b83\u4eec\u6240\u5728\u7684\u51fd\u6570\u65f6\uff0c\u4e0d\u518d\u91cd\u65b0\u8d4b\u521d\u503c\uff0c\u53ea\u662f\u4fdd\u7559\u4e0a\u6b21\u8c03\u7528 \u7ed3\u675f\u65f6\u7684\u503c\uff01
\uff083\uff09\u4f55\u65f6\u4f7f\u7528\u9759\u6001\u5185\u90e8\u53d8\u91cf
1\uff09\u9700\u8981\u4fdd\u7559\u51fd\u6570\u4e0a\u4e00\u6b21\u8c03\u7528\u7ed3\u675f\u65f6\u7684\u503c\u3002
2\uff09\u53d8\u91cf\u53ea\u88ab\u5f15\u7528\u800c\u4e0d\u6539\u53d8\u5176\u503c\u3002

\u4e00\u3001\u9759\u6001\u5168\u5c40\u53d8\u91cf
\u5168\u5c40\u53d8\u91cf(\u5916\u90e8\u53d8\u91cf)\u7684\u8bf4\u660e\u4e4b\u524d\u518d\u51a0\u4ee5static \u5c31\u6784\u6210\u4e86\u9759\u6001\u7684\u5168\u5c40\u53d8\u91cf\u3002\u5168\u5c40\u53d8\u91cf\u662f\u9759\u6001\u5b58\u50a8\u65b9\u5f0f\uff0c \u9759\u6001\u5168\u5c40\u53d8\u91cf\u4e5f\u662f\u9759\u6001\u5b58\u50a8\u65b9\u5f0f\u3002 \u8fd9\u4e24\u8005\u5728\u5b58\u50a8\u65b9\u5f0f\u4e0a\u5e76\u65e0\u4e0d\u540c\u3002\u8fd9\u4e24\u8005\u7684\u533a\u522b\u867d\u5728\u4e8e\u975e\u9759\u6001\u5168\u5c40\u53d8\u91cf\u7684\u4f5c\u7528\u57df\u662f\u6574\u4e2a\u6e90\u7a0b\u5e8f\uff0c \u5f53\u4e00\u4e2a\u6e90\u7a0b\u5e8f\u7531\u591a\u4e2a\u6e90\u6587\u4ef6\u7ec4\u6210\u65f6\uff0c\u975e\u9759\u6001\u7684\u5168\u5c40\u53d8\u91cf\u5728\u5404\u4e2a\u6e90\u6587\u4ef6\u4e2d\u90fd\u662f\u6709\u6548\u7684\u3002 \u800c\u9759\u6001\u5168\u5c40\u53d8\u91cf\u5219\u9650\u5236\u4e86\u5176\u4f5c\u7528\u57df\uff0c \u5373\u53ea\u5728\u5b9a\u4e49\u8be5\u53d8\u91cf\u7684\u6e90\u6587\u4ef6\u5185\u6709\u6548\uff0c \u5728\u540c\u4e00\u6e90\u7a0b\u5e8f\u7684\u5176\u5b83\u6e90\u6587\u4ef6\u4e2d\u4e0d\u80fd\u4f7f\u7528\u5b83\u3002\u7531\u4e8e\u9759\u6001\u5168\u5c40\u53d8\u91cf\u7684\u4f5c\u7528\u57df\u5c40\u9650\u4e8e\u4e00\u4e2a\u6e90\u6587\u4ef6\u5185\uff0c\u53ea\u80fd\u4e3a\u8be5\u6e90\u6587\u4ef6\u5185\u7684\u51fd\u6570\u516c\u7528\uff0c \u56e0\u6b64\u53ef\u4ee5\u907f\u514d\u5728\u5176\u5b83\u6e90\u6587\u4ef6\u4e2d\u5f15\u8d77\u9519\u8bef\u3002

\u4e8c\u3001\u9759\u6001\u5c40\u90e8\u53d8\u91cf
static\u58f0\u660e\u7684\u5c40\u90e8\u53d8\u91cf\u5728\u8c03\u7528\u7ed3\u675f\u540e\u4e0d\u6d88\u5931\u800c\u4fdd\u7559\u539f\u503c\uff0c\u5373\u5176\u5360\u7528\u5b58\u50a8\u4f46\u613f\u4e0d\u91ca\u653e\uff0c\u5728\u4e0b\u4e00\u6b21\u8be5\u51fd\u6570\u8c03\u7528\u65f6\uff0c\u8be5\u53d8\u91cf\u4fdd\u7559\u4e0a\u4e00\u6b21\u51fd\u6570\u8c03\u7528\u7ed3\u675f\u65f6\u7684\u503c\u3002
\u53ea\u88ab\u521d\u59cb\u5316\u4e00\u6b21\u4e14\u53ea\u80fd\u5728\u5c40\u90e8\u4f7f\u7528\u3002
\u5982
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;
}
\u6253\u5370\u7ed3\u679c:func1: 0 1 2 3 4 5 6 7 8 9
func2: 0 0 0 0 0 0 0 0 0 0
\u4e14 a\u53ea\u80fd\u5728func()\u51fd\u6570\u4e2d\u4f7f\u7528\u3002

胡说八道。

这道题中发生了内存越界。 m=0和n=0时 m-1会是-1 会出现 a[-1]。

加上了static会把a编译在数据段中。这样越界后旁边是未初始化的数据,还是0。

但如果不加,a会被编译进代码段中。这样a前后可能会有程序代码,结果a[-1]就不是0。

第一个数就错了,后面就全错了。

这是个大问题,不要这么做。

不加static那些数也不是随机的,每次都一样。不信你去试。汇编高手也可以推算出是什么。

static是声明静态存储

static是声明静态存储,分配内存时给变量(包括数组元素)赋初值0.
如果没有static,为动态存储,变量值为随机值

static是声明静态存储,分配内存时给变量赋初值0.
如果没有static,为动态存储,变量值为随机值

表示的是静态变量,即在一个过程运行完毕之后变量没有被释放掉
下次使用时值仍是上次的值,有些像全局变量

  • c璇█:static闂
    绛旓細涓銆侀潤鎬佸叏灞鍙橀噺 鍏ㄥ眬鍙橀噺(澶栭儴鍙橀噺)鐨勮鏄庝箣鍓嶅啀鍐犱互static 灏辨瀯鎴愪簡闈欐佺殑鍏ㄥ眬鍙橀噺銆傚叏灞鍙橀噺鏄潤鎬佸瓨鍌ㄦ柟寮忥紝 闈欐佸叏灞鍙橀噺涔熸槸闈欐佸瓨鍌ㄦ柟寮忋 杩欎袱鑰呭湪瀛樺偍鏂瑰紡涓婂苟鏃犱笉鍚屻傝繖涓よ呯殑鍖哄埆铏藉湪浜庨潪闈欐佸叏灞鍙橀噺鐨勪綔鐢ㄥ煙鏄暣涓簮绋嬪簭锛 褰撲竴涓簮绋嬪簭鐢卞涓簮鏂囦欢缁勬垚鏃讹紝闈為潤鎬佺殑鍏ㄥ眬鍙橀噺鍦ㄥ悇涓簮鏂囦欢涓...
  • C璇█涓叧浜巗tatic鐨勯棶棰
    绛旓細杩欓亾棰樹腑鍙戠敓浜嗗唴瀛樿秺鐣屻 m=0鍜宯=0鏃 m-1浼氭槸-1 浼氬嚭鐜 a[-1]銆傚姞涓婁簡static浼氭妸a缂栬瘧鍦ㄦ暟鎹涓傝繖鏍疯秺鐣屽悗鏃佽竟鏄湭鍒濆鍖鐨鏁版嵁锛岃繕鏄0銆備絾濡傛灉涓嶅姞锛宎浼氳缂栬瘧杩涗唬鐮佹涓傝繖鏍穉鍓嶅悗鍙兘浼氭湁绋嬪簭浠g爜锛岀粨鏋渁[-1]灏变笉鏄0銆傜涓涓暟灏遍敊浜嗭紝鍚庨潰灏卞叏閿欎簡銆傝繖鏄釜澶闂锛屼笉瑕佽繖...
  • c璇█涓殑static鍙互鐪佺暐鍚?
    绛旓細鍙互锛static鍦–璇█涓槸琛ㄧず涓涓彉閲忎负闈欐佸彉閲忕殑锛岃屼笉鏄父閲忥紝涔熶笉鏄笉鍙彉鐨勫彉閲銆傛墍璋撶殑闈欐佸彉閲忔湁涓ょ鎯呭喌锛屼竴绉嶆槸闈欐佸叏灞鍙橀噺锛屼竴绉嶆槸闈欐佸眬閮ㄥ彉閲忋傚儚鍦╒B锛孋#锛孋锛孋++锛孞ava锛孭HP锛孫bjective-C锛孞avaScript涓垜浠彲浠ョ湅鍒皊tatic浣滀负鍏抽敭瀛楀拰鍑芥暟鍑虹幇锛屽湪鍏朵粬鐨勯珮绾ц绠楁満璇█濡侳ORTRAN銆丄LGOL銆丆OB...
  • c璇█涓璼tatic闂
    绛旓細涓ょ锛鍏ㄥ眬鍙橀噺鍜岄潤鎬佺被鍨嬪彉閲 锛宻tatic锛屽嵆鍦ㄧ▼搴忚繍琛岀殑杩囩▼涓潤鎬佸彉閲忓缁堟槸鍗犵敤涓涓瓨鍌ㄧ┖闂銆傞潤鎬佸彉閲忓彧鑳藉湪浠栫殑浣滅敤鑼冨洿鍐呬娇鐢紝浣跨敤灞閮ㄩ潤鎬佸彉閲忔槸涓轰簡鍦ㄤ笅娆¤皟鐢ㄨ鍑芥暟鏃讹紝鑳戒娇鐢ㄤ笂娆¤皟鐢ㄥ悗寰楀埌鐨勮鍙橀噺鐨勫笺傦紙1锛夊畾涔夋牸寮忥細 static 鏁版嵁绫诲瀷 鍐呴儴鍙橀噺琛紱锛2锛夊瓨鍌ㄧ壒鐐 1锛夐潤鎬佸唴閮ㄥ彉閲忓睘浜庨潤鎬...
  • static鍦C璇█涓鍙互澹版槑鍙橀噺鍚?
    绛旓細鍙互锛static鍦–璇█涓槸琛ㄧず涓涓彉閲忎负闈欐佸彉閲忕殑锛岃屼笉鏄父閲忥紝涔熶笉鏄笉鍙彉鐨勫彉閲銆傛墍璋撶殑闈欐佸彉閲忔湁涓ょ鎯呭喌锛屼竴绉嶆槸闈欐佸叏灞鍙橀噺锛屼竴绉嶆槸闈欐佸眬閮ㄥ彉閲忋傚厛璇撮潤鎬佸眬閮ㄥ彉閲忥細閫氬父鎯呭喌涓嬶紝鍦ㄤ竴涓嚱鏁颁腑瀹氫箟涓涓彉閲忥紝閭d箞鍑芥暟閫鍑轰箣鍚庯紝杩欎釜鍙橀噺灏辨秷澶变簡锛屽嵆浣夸綘绗簩娆¤皟鐢ㄨ繖涓嚱鏁帮紝閲岄潰鐨勫彉閲忎篃浼氳...
  • c璇█涓璼tatic鏄粈涔堟剰鎬(static鍦╟璇█涓槸浠涔堟剰鎬濇槸鐢ㄤ粈涔堣緭鍑)_鐧 ...
    绛旓細鍦C璇█涓锛static鍏抽敭瀛椾笉浠呭彲浠ョ敤鏉ヤ慨楗板彉閲忥紝杩樺彲浠ョ敤鏉ヤ慨楗板嚱鏁般傚湪浣跨敤static鍏抽敭瀛椾慨楗板彉閲忔椂锛屾垜浠О姝ゅ彉閲忎负闈欐佸彉閲忋傞潤鎬佸彉閲忕殑瀛樺偍鏂瑰紡涓庡叏灞鍙橀噺涓鏍凤紝閮芥槸闈欐佸瓨鍌ㄦ柟寮忋備絾杩欓噷闇瑕佺壒鍒鏄庣殑鏄紝闈欐佸彉閲忓睘浜庨潤鎬佸瓨鍌ㄦ柟寮忥紝灞炰簬闈欐佸瓨鍌ㄦ柟寮忕殑鍙橀噺鍗翠笉涓瀹氬氨鏄潤鎬佸彉閲忋備緥濡傦紝鍏ㄥ眬鍙橀噺铏界劧灞炰簬闈欐...
  • 涓涓C璇█绋嬪簭,鍏充簬static,涓轰粈涔堣繍琛岀粨鏋滄槸60,鑰屼笉鏄45?
    绛旓細鍥犱负sum鏄static绫诲瀷鐨鍙橀噺銆俿tatic鍙橀噺鍙0鏄庝竴娆★紝鍚庨潰姣忔鐢ㄦ椂灏卞彇瀹冩渶鍚庣殑鍊笺傛墍浠ュ綋杩愯fun(b,4)鐨勬椂鍊檚tatic int sum=0宸茬粡涓嶇鐢ㄣ俿um鐩存帴绛変簬鍓嶉潰鐨勫15.鍐嶅姞涓婂悗闈㈢殑30灏辨槸45 鏈鍚庡姞涓奻un(a,5)鐨勭粨鏋滃氨鏄60浜嗗晩銆傚鏋滀綘鍘绘帀static灏辨槸45....
  • static鍏抽敭瀛楀湪C璇█涓湁浠涔鏍风殑浣滅敤?
    绛旓細鍦C璇█涓锛static鍏抽敭瀛楃殑浣滅敤濡備笅锛1銆佸湪淇グ鍙橀噺鐨勬椂锛宻tatic淇グ鐨勯潤鎬佸眬閮ㄥ彉閲忓彧鎵ц涓娆★紝鑰屼笖寤堕暱浜嗗眬閮ㄥ彉閲忕殑鐢熷懡鍛ㄦ湡锛岀洿鍒扮▼搴忚繍琛岀粨鏉熶互鍚庢墠閲婃斁銆2銆乻tatic淇グ鍏ㄥ眬鍙橀噺鐨勬椂锛岃繖涓叏灞鍙橀噺鍙兘鍦ㄦ湰鏂囦欢涓闂紝涓嶈兘鍦ㄥ叾瀹冩枃浠朵腑璁块棶锛屽嵆渚挎槸extern澶栭儴澹版槑涔熶笉鍙互銆3銆乻tatic淇グ涓涓嚱鏁帮紝鍒欒繖涓...
  • static鍦c璇█涓殑鐢ㄦ硶
    绛旓細static鍦c璇█涓鏄鏈夈侀潤鎬佹剰鎬濄傜敤浜庡湪鍑芥暟涓0鏄庘滈潤鎬佸彉閲忊濈敤锛屽湪姣忎竴娆¤皟鐢ㄥ悗锛岃鍙橀噺骞朵笉鍦ㄥ嚱鏁拌繑鍥炴椂绔嬪嵆閲婃斁锛屽彉閲忎腑淇濆瓨鐨勫硷紝鍙互淇濈暀鍒颁笅涓娆¤皟鐢ㄦ椂缁х画鏈夋晥銆傜鏈夊氨鏄殣钘忋俿tatic鍑芥暟鍙兘澹版槑鍚庣殑鏈枃涓皟鐢ㄣ俿tatic鍏ㄥ眬鍙橀噺鍙兘澹版槑鍚庣殑鏈枃涓皟鐢ㄣ俿tatic灞閮ㄥ彉閲忓彧鑳藉0鏄庡悗鐨勬湰鍑芥暟璋冪敤 闈欐...
  • c璇█static(闈欐佸彉閲忋侀潤鎬佸嚱鏁般闈欐佸叏灞鍙橀噺)
    绛旓細鍦–璇█涓紝static鏄竴涓潪甯搁噸瑕佺殑鍏抽敭瀛楋紝瀹冨彲浠ョ敤浜庡畾涔夐潤鎬佸彉閲忋侀潤鎬佸嚱鏁颁互鍙闈欐佸叏灞鍙橀噺銆傞潤鎬佸彉閲忋侀潤鎬佸嚱鏁板拰闈欐佸叏灞鍙橀噺鐨勪綔鐢ㄥ煙鍜岀敓鍛藉懆鏈熶笌鏅氬彉閲忋佸嚱鏁板拰鍏ㄥ眬鍙橀噺鏈夋墍涓嶅悓锛屼娇鐢ㄥ畠浠彲浠ュ府鍔╂垜浠洿濂藉湴绠$悊绋嬪簭鐨勭姸鎬佸拰鏁版嵁銆傞潤鎬佸彉閲 闈欐佸彉閲忔槸鎸囧湪鍑芥暟鍐呴儴鎴栬呭潡鍐呴儴瀹氫箟鐨勫彉閲忥紝浣嗘槸瀹冪殑...
  • 扩展阅读:c语言static经典例子 ... c语言static关键字 ... static int的值会变吗 ... c语言static有什么用 ... c语言static的用法举例 ... c++中static的作用和用法 ... static在c语言中的用法 ... static int是什么意思 ... c语言中static的作用 举例 ...

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