知è˜(shÃ)
ä¸ç®¡æ˜¯ç¶²(wÇŽng)站,軟件還是å°ç¨‹åºï¼Œéƒ½è¦ç›´æŽ¥æˆ–間接能為您產(chÇŽn)生價(jià )值,我們?cè)è°§éžç¬ƒæ¹Ÿæ›ˆX表ç¾(xià n)çš„åŒæ™‚(shÃ),更å´(cè)é‡äºŽåŠŸèƒ½çš„ä¾¿æ·ï¼Œç‡ŸéŠ·çš„ä¾¿åˆ©ï¼Œé‹(yùn)營的高效,讓網(wÇŽng)ç«™æˆç‚ºç‡ŸéŠ·å·¥å…·ï¼Œè®“è»Ÿä»¶èƒ½åˆ‡å¯¦(shÃ)æå‡ä¼æ¥(yè)å…§(nèi)éƒ¨ç®¡ç†æ°´å¹³å’Œæ•ˆçŽ‡ã€‚å„ª(yÅu)秀的程åº?yà n)楹笃è°î¥?jÃ)æä¾›ä¾¿æ·çš„æ”¯æŒï¼
您當(dÄng)å‰ä½ç½®>é¦–é » æ–°èžè³‡è¨Š » 技術(shù)分享 >
C語言關(guÄn)éµå— extern const static
發(fÄ)表時(shÃ)間:2020-10-19
發(fÄ)布人:葵宇科技
ç€è¦½æ¬¡æ•¸(shù):442
引言
C語言共有32個(gè)é—œ(guÄn)éµå—,å…¶ä¸extern const å’Œ static都是有關(guÄn)å˜å„²(chÇ”)與生命周期的類型。ã€1】
復(fù)ç¿’(xÃ)
一個(gè)ç”±C/C++ç·¨è¯çš„程åºå 用的內(nèi)å˜åˆ†ç‚ºä»¥ä¸‹å¹¾å€‹(gè)部分
1ã€æ£§å€(qÅ«)(stack):
由編è¯å™¨è‡ªå‹•(dòng)分é…釋放 ,å˜æ”¾å‡½æ•¸(shù)çš„åƒæ•¸(shù)值,局部變é‡çš„值ç‰ã€‚å…¶æ“作方å¼é¡žä¼¼äºŽæ•¸(shù)據(jù)çµ(jié)æ§‹(gòu)ä¸çš„æ£§ã€‚
2ã€å †å€(qÅ«)(heap):
一般由程åºå“¡åˆ†é…釋放,如cä¸malloc函數(shù),C++ä¸newé‹(yùn)算符,若程åºå“¡ä¸é‡‹æ”¾,程åºçµ(jié)æŸæ™‚(shÃ)å¯èƒ½ç”±ç³»çµ±(tÇ’ng)回收 。
3ã€å…¨å±€å€(qÅ«)(éœæ…‹(tà i)å€(qÅ«))(static):
全局變é‡å’Œéœæ…‹(tà i)變é‡çš„å˜å„²(chÇ”)是放在一塊的,åˆå§‹åŒ–的全局變é‡å’Œéœæ…‹(tà i)變é‡åœ¨ä¸€å¡Šå€(qÅ«)域, 未åˆå§‹åŒ–的全局變é‡å’Œæœªåˆå§‹åŒ–çš„éœæ…‹(tà i)變é‡åœ¨ç›¸é„°çš„å¦ä¸€å¡Šå€(qÅ«)域。程åºçµ(jié)æŸåŽç”±ç³»çµ±(tÇ’ng)釋放。
4ã€æ–‡å—常é‡å€(qÅ«):
常é‡å—符串就是放在這里的。 程åºçµ(jié)æŸåŽç”±ç³»çµ±(tÇ’ng)釋放
5ã€ç¨‹åºä»£ç¢¼å€(qÅ«):
å˜æ”¾å‡½æ•¸(shù)體的二進(jìn)制代碼。
staticé—œ(guÄn)éµå—
static在c里é¢å¯ä»¥ç”¨ä¾†ä¿®é£¾è®Šé‡,也å¯ä»¥ç”¨ä¾†ä¿®é£¾å‡½æ•¸(shù)。
先看用來修飾變é‡çš„æ™‚(shÃ)候。在c里é¢è®Šé‡å¯åˆ†ç‚ºå…¨å±€?jÇn)?shù)據(jù)å€(qÅ«)ã€æ£§å’Œå †é‡Œ
一:static變é‡çš„常見應(yÄ«ng)用
1:éœæ…‹(tà i)局部變é‡å’Œæ™®é€šå±€éƒ¨è®Šé‡çš„å€(qÅ«)別:
它們的主è¦å€(qÅ«)別是作用域ä¸åŒ,éœæ…‹(tà i)局部變é‡çš„æ˜¯åŒ…å«å®ƒç•¶(dÄng)å‰çš„æºæ–‡ä»¶,è©²å·¥ç¨‹çš„å…¶ä»–æºæ–‡ä»¶æ˜¯ä¸å¯ä»¥è¨ªå•它的。這樣åšçš„好處是多人è¯(lián)åˆé–‹ç™¼(fÄ)時(shÃ),ä¸å¿…?fù)?dÄn)心變é‡åæ²–çªå•題。而普通局部變é‡çš„的作用域是當(dÄng)å‰çš„æ•´å€‹(gè)工程,整個(gè)工程里的ä¸åŒæ–‡ä»¶å¯ä»¥å…±äº«å…¨å±€è®Šé‡ã€‚
å…©è€…éƒ½å˜æ”¾åœ¨å…¨å±€?jÇn)?shù)據(jù)å€(qÅ«),如果沒有åˆå§‹åŒ–,系統(tÇ’ng)將其自動(dòng)åˆå§‹åŒ–為0。
2:éœæ…‹(tà i)局部變é‡å’Œæ™®é€šå±€éƒ¨è®Šé‡çš„å€(qÅ«)別:
(1):å˜å„²(chÇ”)ä½ç½®ä¸åŒ:
éœæ…‹(tà i)局部變é‡è¢«static修飾,其生命周期是全局的,在整個(gè)æºæ–‡ä»¶åŸ·(zhÃ)行完畢åŽé‡‹æ”¾,è€Œä¸æœƒ(huì)在æŸå€‹(gè)ç•¶(dÄng)å‰å‡½æ•¸(shù)執(zhÃ)行完就釋放,æ‰€ä»¥èªªéœæ…‹(tà i)局部變é‡å˜å„²(chÇ”)在全局?jÇn)?shù)據(jù)å€(qÅ«)。由于整個(gè)生命周期是全局的,所以å°(duì)å…¶åˆå§‹åŒ–åªæœƒ(huì)執(zhÃ)行一次,åŽé¢é‡åˆ°çš„åˆæ³•åˆå§‹åŒ–也會(huì)自動(dòng)è·³éŽã€‚但是其作用域還是局部的,在其作用域外ä¸å¯ä»¥è¢«èª¿(dià o)用。
普通局部變é‡å˜æ”¾åœ¨å †æ£§ä¸,隨函數(shù)執(zhÃ)行完畢åŽè‡ªå‹•(dòng)釋放。
(2):默èª(rèn)åˆå§‹å€¼ä¸åŒ,éœæ…‹(tà i)局部變é‡é»˜èª(rèn)åˆå§‹å€¼ç‚º0,但其如果人為åˆå§‹åŒ–åªåŸ·(zhÃ)行一次,åŽé¢çš„åˆå§‹åŒ–éƒ½ä¸æœƒ(huì)å†åŸ·(zhÃ)行。而普通局部變é‡åˆå§‹å€¼éš¨æ©Ÿ(jÄ«),但是æ¯ä¸€æ¬¡åˆæ³•åˆå§‹åŒ–都會(huì)執(zhÃ)行。
典型應(yÄ«ng)用:
#include <stdio.h>
static int a;//éœæ…‹(tà i)變é‡,åªåˆå§‹åŒ–一次,默èª(rèn)為0
static void fun();//éœæ…‹(tà i)函數(shù),åªåˆå§‹åŒ–一次
int main()
{
fun();
printf("main:a=%d\n",a);
fun();
return 0;
}
static void fun()
{
static int a=10;
int b=20;
a*=10;
b*=20;
printf("fun:a=%d,b=%d\n",a,b);
}
é‹(yùn)行çµ(jié)æžœ:
éœæ…‹(tà i)函數(shù)åªåˆå§‹åŒ–一次,而普通函數(shù)å¯ä»¥å¤šæ¬¡åˆå§‹åŒ–。且普通全局變é‡é»˜èª(rèn)為0。
consté—œ(guÄn)éµå—
如果一個(gè)變é‡è¢«const修飾,那么它的值就ä¸èƒ½å†è¢«æ”¹è®Šã€‚注æ„:用constä¿®é£¾è®Šé‡æ™‚(shÃ),一定è¦çµ¦è®Šé‡åˆå§‹åŒ–,å¦å‰‡ä¹‹åŽå°±ä¸èƒ½å†é€²(jìn)行賦值。
1.修飾普通變é‡
åŠ const修飾是為了防æ¢è®Šé‡è¢«ä¿®æ”¹
如果該變é‡ç‚ºå…¨å±€è®Šé‡,則ä¸èƒ½é€šéŽæŒ‡é‡ä¿®æ”¹,但如果是局部變é‡,則還是å¯ä»¥é€šéŽæŒ‡é‡ä¿®æ”¹çš„。
åŽŸå› æ˜¯:全局變é‡åœ¨å…¨å±€éœæ…‹(tà i)å€(qÅ«),å…§(nèi)容ä¸èƒ½è¢«ä¿®æ”¹,ä½†å±€éƒ¨è®Šé‡æœ¬èº«ä»åœ¨æ£§å€(qÅ«),å¯ä»¥ä½¿ç”¨æŒ‡é‡ä¿®æ”¹ã€‚
2.修飾指é‡è®Šé‡
1)ç•¶(dÄng)const修飾*號(hà o)時(shÃ),表示ä¸èƒ½é€šéŽæŒ‡é‡p_a修改p_a指å‘的內(nèi)容。這å¥è©±æœ‰3å±¤æ„æ€(å°(duì)應(yÄ«ng)上述代碼三種情æ³):
â‘ ç•¶(dÄng)p_a指å‘a時(shÃ),ä¸èƒ½é€šéŽæŒ‡é‡p_aå–*號(hà o)修改aä¸çš„å…§(nèi)容
â‘¡aä¸çš„å…§(nèi)容ä»å¯ä»¥ç”±a自身修改
â‘¢p_a指å‘å¯ä»¥æ”¹è®Š,å³p_aå¯ä»¥æŒ‡å‘b
å¯ä»¥é€™ä¹ˆè¨˜æ†¶:號(hà o)是指é‡ç”¨ä¾†å°(duì)指å‘的內(nèi)å˜æ“作(讀寫)çš„,ç•¶(dÄng)å°(duì)åŠ äº†const修飾,æ„味著號(hà o)çš„æ“作åªå‰©ä¸‹åªè®€çš„功能,也就是åªèƒ½ä½¿ç”¨è™Ÿ(hà o)ä¾†è®€å–æŒ‡é‡æŒ‡å‘的內(nèi)容,而失去了寫的特性,這點(diÇŽn)與普通變é‡çš„æƒ…æ³é¡žä¼¼ã€‚
2)ç•¶(dÄng)const修飾變é‡p_a時(shÃ),表示ä¸èƒ½æ”¹è®Šp_a的內(nèi)容,峿”¹ä¸äº†æŒ‡é‡çš„æŒ‡å‘。這å¥è©±æœ‰3å±¤æ„æ€(å°(duì)應(yÄ«ng)上述代碼三種情æ³):
â‘ ç•¶(dÄng)p_a指å‘a時(shÃ),èƒ½é€šéŽæŒ‡é‡p_aå–*號(hà o)修改aä¸çš„å…§(nèi)容
â‘¡aä¸çš„å…§(nèi)容ä»å¯ä»¥ç”±a自身修改
â‘¢p_a指å‘ä¸å¯ä»¥æ”¹è®Š,å³p_aä¸å¯ä»¥ä¿®æ”¹,指å‘b或者其他變é‡
3.修飾函數(shù)
to be continued
C++ä¸å°(duì)staticå’Œconst的擴(kuò)展和
相關(guÄn)案例查看更多
相關(guÄn)閱讀
- å°ç¨‹åºå®šåˆ¶
- 百度快速排å
- ç¶²(wÇŽng)站建è¨(shè)高手
- 分銷系統(tǒng)
- ç¶²(wÇŽng)ç«™å°ç¨‹åº
- 云å—ç¶²(wÇŽng)絡(luò)營銷顧å•
- ç¶²(wÇŽng)站開發(fÄ)
- ç¶²(wÇŽng)站建è¨(shè)開發(fÄ)
- 昆明網(wÇŽng)ç«™è¨(shè)計(jì)
- ç”Ÿæˆæµ·å ±(bà o)
- 開發(fÄ)框架
- 云å—åšç¶²(wÇŽng)ç«™
- 網(wǎng)站收錄
- 云å—軟件開發(fÄ)
- 云å—電商網(wÇŽng)站建è¨(shè)
- å°ç¨‹åºé–‹ç™¼(fÄ)排åå‰åå
- 百度å°ç¨‹åºå…¬å¸
- aspç¶²(wÇŽng)ç«™
- 模版信æ¯
- å°ç¨‹åºçš„開發(fÄ)å…¬å¸
- 云å—è¡›(wèi)視å°ç¨‹åº
- 云å—ç¶²(wÇŽng)站建è¨(shè)快速優(yÅu)化
- 出入å°ç¨‹åº
- web教程
- å°ç¨‹åºé–‹ç™¼(fÄ)å…¬å¸
- 模版消æ¯
- 百度人工排å
- 云å—軟件è¨(shè)計(jì)
- 云å—ç¶²(wÇŽng)站建è¨(shè) ç¶²(wÇŽng)絡(luò)æœå‹™(wù)
- 電商網(wÇŽng)站建è¨(shè)