欧美三级国产三级日韩三级_亚洲熟妇丰满大屁股熟妇_欧美亚洲成人一区二区三区_国产精品久久久久久模特

C語言關(guān)鍵字 extern const static - 新聞資訊 - 云南小程序開發(fā)|云南軟件開發(fā)|云南網(wǎng)站建設(shè)-昆明葵宇信息科技有限公司

159-8711-8523

云南網(wǎng)建設(shè)/小程序開發(fā)/軟件開發(fā)

知識(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)閱讀