深入理解C++中變量的存儲(chǔ)類(lèi)別和屬性
C++變量的存儲(chǔ)類(lèi)別(動(dòng)態(tài)存儲(chǔ)、靜態(tài)存儲(chǔ)、自動(dòng)變量、寄存器變量、外部變量)
動(dòng)態(tài)存儲(chǔ)方式與靜態(tài)存儲(chǔ)方式
我們已經(jīng)了解了變量的作用域。作用域是從空間的角度來(lái)分析的,分為全局變量和局部變量。
變量還有另一種屬性——存儲(chǔ)期(storage duration,也稱(chēng)生命期)。存儲(chǔ)期是指變量在內(nèi)存中的存在期間。這是從變量值存在的時(shí)間角度來(lái)分析的。存儲(chǔ)期可以分為靜態(tài)存儲(chǔ)期(static storage duration)和動(dòng)態(tài)存儲(chǔ)期(dynamic storage duration)。這是由變量的靜態(tài)存儲(chǔ)方式和動(dòng)態(tài)存儲(chǔ)方式?jīng)Q定的。
所謂靜態(tài)存儲(chǔ)方式是指在程序運(yùn)行期間,系統(tǒng)對(duì)變量分配固定的存儲(chǔ)空間。而動(dòng)態(tài)存儲(chǔ)方式則是在程序運(yùn)行期間,系統(tǒng)對(duì)變量動(dòng)態(tài)地分配存儲(chǔ)空間。
先看一下內(nèi)存中的供用戶(hù)使用的存儲(chǔ)空間的情況。這個(gè)存儲(chǔ)空間可以分為三部分,即:
- 程序區(qū)
- 靜態(tài)存儲(chǔ)區(qū)
- 動(dòng)態(tài)存儲(chǔ)區(qū)
數(shù)據(jù)分別存放在靜態(tài)存儲(chǔ)區(qū)和動(dòng)態(tài)存儲(chǔ)區(qū)中。全局變量全部存放在靜態(tài)存儲(chǔ)區(qū)中,在程序開(kāi)始執(zhí)行時(shí)給全局變量分配存儲(chǔ)單元,程序執(zhí)行完畢就釋放這些空間。在程序執(zhí)行過(guò)程中它們占據(jù)固定的存儲(chǔ)單元,而不是動(dòng)態(tài)地進(jìn)行分配和釋放。
在動(dòng)態(tài)存儲(chǔ)區(qū)中存放以下數(shù)據(jù):
函數(shù)形式參數(shù)。在調(diào)用函數(shù)時(shí)給形參分配存儲(chǔ)空間。
函數(shù)中的自動(dòng)變量(未加static聲明的局部變量,詳見(jiàn)后面的介紹)。
函數(shù)調(diào)用時(shí)的現(xiàn)場(chǎng)保護(hù)和返回地址等。
對(duì)以上這些數(shù)據(jù),在函數(shù)調(diào)用開(kāi)始時(shí)分配動(dòng)態(tài)存儲(chǔ)空間,函數(shù)結(jié)束時(shí)釋放這些空間。在程序執(zhí)行過(guò)程中,這種分配和釋放是動(dòng)態(tài)的,如果在一個(gè)程序中兩次調(diào)用同一函數(shù),則要進(jìn)行兩次分配和釋放,而兩次分配給此函數(shù)中局部變量的存儲(chǔ)空間地址可能是不相同的。
如果在一個(gè)程序中包含若干個(gè)函數(shù),每個(gè)函數(shù)中的局部變量的存儲(chǔ)期并不等于整個(gè)程序的執(zhí)行周期,它只是整個(gè)程序執(zhí)行周期的一部分。根據(jù)函數(shù)調(diào)用的情況,系統(tǒng)對(duì)局部變量動(dòng)態(tài)地分配和釋放存儲(chǔ)空間。
在C++中變量除了有數(shù)據(jù)類(lèi)型的屬性之外,還有存儲(chǔ)類(lèi)別(storage class) 的屬性。存儲(chǔ)類(lèi)別指的是數(shù)據(jù)在內(nèi)存中存儲(chǔ)的方法。存儲(chǔ)方法分為靜態(tài)存儲(chǔ)和動(dòng)態(tài)存儲(chǔ)兩大類(lèi)。具體包含4種:自動(dòng)的(auto)、靜態(tài)的(static)、寄存器的(register)和外部的(extern)。根據(jù)變量的存儲(chǔ)類(lèi)別,可以知道變量的作用域和存儲(chǔ)期。
自動(dòng)變量
函數(shù)中的局部變量,如果不用關(guān)鍵字static加以聲明,編譯系統(tǒng)對(duì)它們是動(dòng)態(tài)地分配存儲(chǔ)空間的。函數(shù)的形參和在函數(shù)中定義的變量(包括在復(fù)合語(yǔ)句中定義的變量)都屬此類(lèi)。在調(diào)用該函數(shù)時(shí),系統(tǒng)給形參和函數(shù)中定義的變量分配存儲(chǔ)空間,數(shù)據(jù)存儲(chǔ)在動(dòng)態(tài)存儲(chǔ)區(qū)中。在函數(shù)調(diào)用結(jié)束時(shí)就自動(dòng)釋放這些空間。如果是在復(fù)合語(yǔ)句中定義的變量,則在變量定義時(shí)分配存儲(chǔ)空間,在復(fù)合語(yǔ)句結(jié)束時(shí)自動(dòng)釋放空間。因此這類(lèi)局部變量稱(chēng)為自動(dòng)變量(auto variable)。自動(dòng)變量用關(guān)鍵字auto作存儲(chǔ)類(lèi)別的聲明。例如:
int f(int a) //定義f函數(shù),a為形參 { auto int b, c=3; //定義b和c為整型的自動(dòng)變量 }
存儲(chǔ)類(lèi)別auto和數(shù)據(jù)類(lèi)型int的順序任意。關(guān)鍵字auto可以省略,如果不寫(xiě)auto,則系統(tǒng)把它默認(rèn)為自動(dòng)存儲(chǔ)類(lèi)別,它屬于動(dòng)態(tài)存儲(chǔ)方式。程序中大多數(shù)變量屬于自動(dòng)變量。本教程前面各章所介紹的例子中,在函數(shù)中定義的變量都沒(méi)有聲明為auto,其實(shí)都默認(rèn)指定為自動(dòng)變量。在函數(shù)體中以下兩種寫(xiě)法作用相同:
auto int b, c=3; int b, c=3;
用static聲明靜態(tài)局部變量
有時(shí)希望函數(shù)中的局部變量的值在函數(shù)調(diào)用結(jié)束后不消失而保留原值,即其占用的存儲(chǔ)單元不釋放,在下一次該函數(shù)調(diào)用時(shí),該變量保留上一次函數(shù)調(diào)用結(jié)束時(shí)的值。這時(shí)就應(yīng)該指定該局部變量為靜態(tài)局部變量(static local variable)。
【例】靜態(tài)局部變量的值。
#include <iostream> using namespace std; int f(int a) //定義f函數(shù),a為形參 { auto int b=0; //定義b為自動(dòng)變量 static int c=3; //定義c為靜態(tài)局部變量 b=b+1; c=c+1; return a+b+c; } int main( ) { int a=2,i; for(i=0;i<3;i++) cout<<f(a)<<" "; cout<<endl; return 0; }
運(yùn)行結(jié)果為:
7 8 9
先后3次調(diào)用f函數(shù)時(shí),b和c的值如表所示。
對(duì)靜態(tài)局部變量的說(shuō)明:
靜態(tài)局部變量在靜態(tài)存儲(chǔ)區(qū)內(nèi)分配存儲(chǔ)單元。在程序整個(gè)運(yùn)行期間都不釋放。而自動(dòng)變量(即動(dòng)態(tài)局部變量)屬于動(dòng)態(tài)存儲(chǔ)類(lèi)別,存儲(chǔ)在動(dòng)態(tài)存儲(chǔ)區(qū)空間(而不是靜態(tài)存儲(chǔ)區(qū)空間),函數(shù)調(diào)用結(jié)束后即釋放。
為靜態(tài)局部變量賦初值是在編譯時(shí)進(jìn)行值的,即只賦初值一次,在程序運(yùn)行時(shí)它已有初值。以后每次調(diào)用函數(shù)時(shí)不再重新賦初值而只是保留上次函數(shù)調(diào)用結(jié)束時(shí)的值。而為自動(dòng)變量賦初值,不是在編譯時(shí)進(jìn)行的,而是在函數(shù)調(diào)用時(shí)進(jìn)行,每調(diào)用一次函數(shù)重新給一次初值,相當(dāng)于執(zhí)行一次賦值語(yǔ)句。
如果在定義局部變量時(shí)不賦初值的話(huà),對(duì)靜態(tài)局部變量來(lái)說(shuō),編譯時(shí)自動(dòng)賦初值0(對(duì)數(shù)值型變量)或空字符(對(duì)字符型變量)。而對(duì)自動(dòng)變量來(lái)說(shuō),如果不賦初值,則它的值是一個(gè)不確定的值。這是由于每次函數(shù)調(diào)用結(jié)束后存儲(chǔ)單元已釋放,下次調(diào)用時(shí)又重新另分配存儲(chǔ)單元,而所分配的單元中的值是不確定的。
雖然靜態(tài)局部變量在函數(shù)調(diào)用結(jié)束后仍然存在,但其他函數(shù)是不能引用它的,也就是說(shuō),在其他函數(shù)中它是“不可見(jiàn)”的。
在什么情況下需要用局部靜態(tài)變量呢?
1) 需要保留函數(shù)上一次調(diào)用結(jié)束時(shí)的值。例如可以用下例中的方法求n!。
【例】輸出1~5的階乘值(即1!,2!,3!,4!,5!)。
#include <iostream> using namespace std; int fac(int); //函數(shù)聲明 int main( ) { int i; for(i=1;i<=5;i++) cout<<i<<"!="<<fac(i)<<endl; return 0; } int fac(int n) { static int f=1; //f為靜態(tài)局部變量,函數(shù)結(jié)束時(shí)f的值不釋放 f=f*n; //在f原值基礎(chǔ)上乘以n return f; }
運(yùn)行結(jié)果為
1!=1 2!=2 3!=6 4!=24 5!=120
每次調(diào)用fac(i),就輸出一個(gè)i,同時(shí)保留這個(gè)i!的值,以便下次再乘(i+1)。
2) 如果初始化后,變量只被引用而不改變其值,則這時(shí)用靜態(tài)局部變量比較方便,以免每次調(diào)用時(shí)重新賦值。 但是應(yīng)該看到,用靜態(tài)存儲(chǔ)要多占內(nèi)存,而且降低了程序的可讀性,當(dāng)調(diào)用次數(shù)多時(shí)往往弄不清靜態(tài)局部變量的當(dāng)前值是什么。因此,如不必要,不要多用靜態(tài)局部變量。
用register聲明寄存器變量
一般情況下,變量的值是存放在內(nèi)存中的。當(dāng)程序中用到哪一個(gè)變量的值時(shí),由控制器發(fā)出指令將內(nèi)存中該變量的值送到CPU中的運(yùn)算器。經(jīng)過(guò)運(yùn)算器進(jìn)行運(yùn)算,如果需要存數(shù),再?gòu)倪\(yùn)算器將數(shù)據(jù)送到內(nèi)存存放。如圖所示。
為提高執(zhí)行效率,C++允許將局部變量的值放在CPU中的寄存器中,需要用時(shí)直接從寄存器取出參加運(yùn)算,不必再到內(nèi)存中去存取。這種變量叫做寄存器變量,用關(guān)鍵字register作聲明。例如,可以將例4.14中的fac函數(shù)改寫(xiě)如下:
int fac(int n) { register int i,f=1; //定義i和f是寄存器變量 for(i=1;i<=n;i++) f=f*i; return f; }
定義f和i是存放在寄存器的局部變量,如果n的值大,則能節(jié)約許多執(zhí)行時(shí)間。
在程序中定義寄存器變量對(duì)編譯系統(tǒng)只是建議性(而不是強(qiáng)制性)的。當(dāng)今的優(yōu)化編譯系統(tǒng)能夠識(shí)別使用頻繁的變量,自動(dòng)地將這些變量放在寄存器中。
用extern聲明外部變量
全局變量(外部變量)是在函數(shù)的外部定義的,它的作用域?yàn)閺淖兞康亩x處開(kāi)始,到本程序文件的末尾。在此作用域內(nèi),全局變量可以為本文件中各個(gè)函數(shù)所引用。編譯時(shí)將全局變量分配在靜態(tài)存儲(chǔ)區(qū)。
有時(shí)需要用extern來(lái)聲明全局變量,以擴(kuò)展全局變量的作用域。
1) 在一個(gè)文件內(nèi)聲明全局變量
如果外部變量不在文件的開(kāi)頭定義,其有效的作用范圍只限于定義處到文件終了。如果在定義點(diǎn)之前的函數(shù)想引用該全局變量,則應(yīng)該在引用之前用關(guān)鍵字extern對(duì)該變量作外部變量聲明,表示該變量是一個(gè)將在下面定義的全局變量。有了此聲明,就可以從聲明處起,合法地引用該全局變量,這種聲明稱(chēng)為提前引用聲明。
【例】用extern對(duì)外部變量作提前引用聲明,以擴(kuò)展程序文件中的作用域。
#include <iostream> using namespace std; int max(int,int); //函數(shù)聲明 void main( ) { extern int a,b;//對(duì)全局變量a,b作提前引用聲明 cout<<max(a,b)<<endl; } int a=15,b=-7;//定義全局變量a,b int max(int x,int y) { int z; z=x>y?x:y; return z; }
運(yùn)行結(jié)果如下:
15
在main后面定義了全局變量a,b,但由于全局變量定義的位置在函數(shù)main之后,因此如果沒(méi)有程序的第5行,在main函數(shù)中是不能引用全局變量a和b的。現(xiàn)在我們?cè)趍ain函數(shù)第2行用extern對(duì)a和b作了提前引用聲明,表示a和b是將在后面定義的變量。這樣在main函數(shù)中就可以合法地使用全局變量a和b了。如果不作extern聲明,編譯時(shí)會(huì)出錯(cuò),系統(tǒng)認(rèn)為a和b未經(jīng)定義。一般都把全局變量的定義放在引用它的所有函數(shù)之前,這樣可以避免在函數(shù)中多加一個(gè)extern聲明。
2) 在多文件的程序中聲明外部變量
如果一個(gè)程序包含兩個(gè)文件,在兩個(gè)文件中都要用到同一個(gè)外部變量num,不能分別在兩個(gè)文件中各自定義一個(gè)外部變量num。正確的做法是:在任一個(gè)文件中定義外部變量num,而在另一文件中用extern對(duì)num作外部變量聲明。即
extern int num;
編譯系統(tǒng)由此知道num是一個(gè)已在別處定義的外部變量,它先在本文件中找有無(wú)外部變量num,如果有,則將其作用域擴(kuò)展到本行開(kāi)始(如上節(jié)所述),如果本文件中無(wú)此外部變量,則在程序連接時(shí)從其他文件中找有無(wú)外部變量num,如果有,則把在另一文件中定義的外部變量num的作用域擴(kuò)展到本文件,在本文件中可以合法地引用該外部變量num。
分析下例:
filel.cpp
extern int a,b; int main() { cout<<a<<","<<b<<end!; return 0; } file2.cpp int as3,b=4;
┆
在源程序文件ffle2.cpp中定義了整型變量a和b,并賦了初值。在filel.cpp中用extern聲明外部變量a和b,未賦值。在編譯連接成一個(gè)程序后,file2.cpp中的a和b的作用域擴(kuò)展到file2.cpp文件中,因此main函數(shù)中的cout語(yǔ)句輸出a和b的值為3和4。
用extern擴(kuò)展全局變量的作用域,雖然能為程序設(shè)計(jì)帶來(lái)方便,但應(yīng)十分慎重,因?yàn)樵趫?zhí)行一個(gè)文件中的函數(shù)時(shí),可能會(huì)改變了該全局變量的值,從而會(huì)影響到另一文件中的函數(shù)執(zhí)行結(jié)果。
用static聲明靜態(tài)外部變量
有時(shí)在程序設(shè)計(jì)中希望某些外部變量只限于被本文件引用,而不能被其他文件引用。這時(shí)可以在定義外部變量時(shí)加一個(gè)static聲明。例如:
file1.cpp
static int a=3; int main ( ) { ┆ }
file2.cpp
extern int a; int fun (int n) { ┆ a=a*n; ┆ }
在filel.cpp中定義了一個(gè)全局變量a,但它用static聲明,因此只能用于本文件,雖然 在cpp文件中用了“extern int a;”,但file2.cpp文件中仍然無(wú)法使用filel.cpp中的全局變量a。
這種加上static聲明、只能用于本文件的外部變量(全局變量)稱(chēng)為靜態(tài)外部變量。這就為程序的模塊化、通用性提供了方便。如果已知道其他文件不需要引用本文件的全局變量,可以對(duì)本文件中的全局變量都加上static,成為靜態(tài)外部變量,以免被其他文件誤用。
需要指出,不要誤認(rèn)為用static聲明的外部變量才采用靜態(tài)存儲(chǔ)方式(存放在靜態(tài)存儲(chǔ)區(qū)中),而不加static的是動(dòng)態(tài)存儲(chǔ)(存放在動(dòng)態(tài)存儲(chǔ)區(qū))。實(shí)際上,兩種形式的外部變量都用靜態(tài)存儲(chǔ)方式,只是作用范圍不同而已,都是在編譯時(shí)分配內(nèi)存的。
C++變量屬性小結(jié)
一個(gè)變量除了數(shù)據(jù)類(lèi)型以外,還有3種屬性:
存儲(chǔ)類(lèi)別 C++允許使用auto,static,register和extern 4種存儲(chǔ)類(lèi)別。
作用域 指程序中可以引用該變量的區(qū)域。
存儲(chǔ)期 指變量在內(nèi)存的存儲(chǔ)期限。
以上3種屬性是有聯(lián)系的,程序設(shè)計(jì)者只能聲明變量的存儲(chǔ)類(lèi)別,通過(guò)存儲(chǔ)類(lèi)別可以確定變量的作用域和存儲(chǔ)期。
要注意存儲(chǔ)類(lèi)別的用法。auto, static和register 3種存儲(chǔ)類(lèi)別只能用于變量的定義語(yǔ)句中,如:
auto char c; //字符型自動(dòng)變量,在函數(shù)內(nèi)定義 static int a; //靜態(tài)局部整型變量或靜態(tài)外部整型變量 register int d; //整型寄存器變量,在函數(shù)內(nèi)定義 extern int b; //聲明一個(gè)已定義的外部整型變量
說(shuō)明: extern只能用來(lái)聲明已定義的外部變量,而不能用于變量的定義。只要看到extern,就可以判定這是變量聲明,而不是定義變量的語(yǔ)句。
下面從不同角度分析它們之間的聯(lián)系。
1) 從作用域角度分,有局部變量和全局變量。它們采用的存儲(chǔ)類(lèi)別如下:
局部變量
自動(dòng)變量,即動(dòng)態(tài)局部變量(離開(kāi)函數(shù),值就消失)
靜態(tài)局部變量(離開(kāi)函數(shù),值仍保留)
寄存器變量(離開(kāi)函數(shù),值就消失)
形式參數(shù)(可以定義為自動(dòng)變量或寄存器變量)
全局變量
靜態(tài)外部變量(只限本文件引用)
外部變量(即非靜態(tài)的外部變量,允許其他文件引用)
2) 從變量存儲(chǔ)期(存在的時(shí)間)來(lái)區(qū)分,有動(dòng)態(tài)存儲(chǔ)和靜態(tài)存儲(chǔ)兩種類(lèi)型。靜態(tài)存儲(chǔ)是程序整個(gè)運(yùn)行時(shí)間都存在,而動(dòng)態(tài)存儲(chǔ)則是在調(diào)用函數(shù)時(shí)臨時(shí)分配單元。
動(dòng)態(tài)存儲(chǔ)
自動(dòng)變量(本函數(shù)內(nèi)有效)
寄存器變量(本函數(shù)內(nèi)有效)
形式參數(shù)
靜態(tài)存儲(chǔ)
靜態(tài)局部變量(函數(shù)內(nèi)有效)
靜態(tài)外部變量(本文件內(nèi)有效)
外部變量(其他文件可引用)
3) 從變量值存放的位置。可分為:
內(nèi)存中靜態(tài)存儲(chǔ)區(qū)
靜態(tài)局部變量
靜態(tài)外部變量(函數(shù)外部靜態(tài)變量)
外部變量(可為其他文件引用)
內(nèi)存中動(dòng)態(tài)存儲(chǔ)區(qū): 自動(dòng)變量和形式參數(shù)
CPU 中的寄存器: 寄存器變量
4) 關(guān)于作用域和存儲(chǔ)期的概念。
從前面敘述可以知道,對(duì)一個(gè)變量的性質(zhì)可以從兩個(gè)方面分析,一是從變量的作用域,一是從變量值存在時(shí)間的長(zhǎng)短,即存儲(chǔ)期。前者是從空間的角度,后者是從時(shí)間的角度。二者有聯(lián)系但不是同一回事。下圖是作用域的示意圖,下圖是存儲(chǔ)期的示意圖。
如果一個(gè)變量在某個(gè)文件或函數(shù)范圍內(nèi)是有效的,則稱(chēng)該文件或函數(shù)為該變量的作用域,在此作用域內(nèi)可以引用該變量,所以又稱(chēng)變量在此作用域內(nèi)“可見(jiàn)”,這種性質(zhì)又稱(chēng)為變量的可見(jiàn)性,例如圖中變量a?b在函數(shù)f1中可見(jiàn)。
如果一個(gè)變量值在某一時(shí)刻是存在的,則認(rèn)為這一時(shí)刻屬于該變量的存儲(chǔ)期,或稱(chēng)該變量在此時(shí)刻“存在”。下表表示各種類(lèi)型變量的作用域和存在性的情況。
其中“√”表示是,“X”表示否。可以看到自動(dòng)變量和寄存器變量在函數(shù)內(nèi)的可見(jiàn)性和存在性是一致的。在函數(shù)外的可見(jiàn)性和存在性也是一致的。靜態(tài)局部變量在函數(shù)外的可見(jiàn)性和存在性不一致。靜態(tài)外部變量和外部變量的可見(jiàn)性和存在性是一致的。
如果一個(gè)變量在某個(gè)文件或函數(shù)范圍內(nèi)是有效的,則稱(chēng)該文件或函數(shù)為該變量的作用域,在此作用域內(nèi)可以引用該變量,所以又稱(chēng)變量在此作用域內(nèi)“可見(jiàn)”,這種性質(zhì)又稱(chēng)為變量的可見(jiàn)性,例如圖中變量a?b在函數(shù)f1中可見(jiàn)。
如果一個(gè)變量值在某一時(shí)刻是存在的,則認(rèn)為這一時(shí)刻屬于該變量的存儲(chǔ)期,或稱(chēng)該變量在此時(shí)刻“存在”。書(shū)中表表示各種類(lèi)型變量的作用域和存在性的情況。
可以看到自動(dòng)變量和寄存器變量在函數(shù)內(nèi)的可見(jiàn)性和存在性是一致的。在函數(shù)外的可見(jiàn)性和存在性也是一致的。靜態(tài)局部變量在函數(shù)外的可見(jiàn)性和存在性不一致。靜態(tài)外部變量和外部變量的可見(jiàn)性和存在性是一致的。
5) static聲明使變量采用靜態(tài)存儲(chǔ)方式,但它對(duì)局部變量和全局變量所起的作用不同。
對(duì)局部變量來(lái)說(shuō),static使變量由動(dòng)態(tài)存儲(chǔ)方式改變?yōu)殪o態(tài)存儲(chǔ)方式。而對(duì)全局變量來(lái)說(shuō),它使變量局部化(局部于本文件),但仍為靜態(tài)存儲(chǔ)方式。從作用域角度看,凡有static聲明的,其作用域都是局限的,或者局限于本函數(shù)內(nèi)(靜態(tài)局部變量),或者局限于本文件內(nèi)(靜態(tài)外部變量)。
相關(guān)文章
C++使用智能指針實(shí)現(xiàn)模板形式的單例類(lèi)
這篇文章主要為大家詳細(xì)介紹了C++使用了智能指針實(shí)現(xiàn)模板形式的單例類(lèi),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-06-06C語(yǔ)言每日練習(xí)之進(jìn)制轉(zhuǎn)換
這篇文章主要介紹了C語(yǔ)言進(jìn)制轉(zhuǎn)換,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-11-11C++容器適配與棧的實(shí)現(xiàn)及dequeque和優(yōu)先級(jí)詳解
這篇文章主要介紹了C++容器適配與棧的實(shí)現(xiàn)及dequeque和優(yōu)先級(jí),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧2022-10-10MFC實(shí)現(xiàn)學(xué)生選課系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了MFC實(shí)現(xiàn)學(xué)生選課系統(tǒng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-02-02C語(yǔ)言 文件的隨機(jī)讀寫(xiě)詳解及示例代碼
本文主要介紹C語(yǔ)言 文件的隨機(jī)讀寫(xiě),這里整理了相關(guān)資料及示例代碼以便大家學(xué)習(xí)參考,學(xué)習(xí)此部分內(nèi)容的朋友可以參考下2016-08-08C++ txt 文件讀取,并寫(xiě)入結(jié)構(gòu)體中的操作
這篇文章主要介紹了C++ txt 文件讀取,并寫(xiě)入結(jié)構(gòu)體中的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-12-12C語(yǔ)言 棧的表示和實(shí)現(xiàn)詳細(xì)介紹
這篇文章主要介紹了C語(yǔ)言 棧的表示和實(shí)現(xiàn)詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下2016-12-12C語(yǔ)言實(shí)現(xiàn)掃雷游戲(含注釋詳解)
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)掃雷游戲,含注釋?zhuān)闹惺纠a介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-06-06C++內(nèi)核對(duì)象封裝單實(shí)例啟動(dòng)程序的類(lèi)
這篇文章主要介紹了利用C++內(nèi)核對(duì)象封裝的類(lèi),程序只能運(yùn)行單個(gè)實(shí)例,可防止多次啟動(dòng),大家參考使用吧2013-11-11