第1篇 程序設計基礎及數據結構基礎
基本概念
1.C++內置類型
內置的C++類型分兩組,基本類型和復合類型。基本類型包括整數、浮點數及兩者的多種變體。復合類型包括數組、字符串、指針、引用、結構體和共用體等。
2.C++的基本整型
按寬度遞增的順序排列,分別是char、short(也可稱為短整型)、int(也可稱為整型)和long(也可稱為長整型),其中每種類型都有無符號版本和有符號版本。
3.內存分區
1)堆:由程序員手動分配和釋放,完全不同于數據結構中的堆,分配方式類似鏈表。由malloc(C語言)或new(C++)來分配,free(C語言)和delete(C++)釋放。若程序員不釋放,程序結束時由系統釋放。
2)棧:由編譯器自動分配和釋放的,存放函數的參數值、局部變量的值等。操作方式類似數據結構中的棧。
3)全局(靜態)存儲區:存放全局變量和靜態變量。包括DATA段(全局初始化區)與BSS段(全局未初始化區)。其中,初始化的全局變量和靜態變量存放在DATA段,未初始化的全局變量和未初始化的靜態變量存放在BSS段。程序結束后由系統釋放。
其中BSS段的特點是:在程序執行之前BSS段會自動清0。所以,未初始的全局變量與靜態變量在程序執行之前已經成0了。
4)文字常量區:常量字符串就是放在這里的。程序結束后由系統釋放。
5)程序代碼區:存放函數體的二進制代碼。
注意:請牢記內存分區的概念,后面多有涉及。
例1:以下代碼有助于理解上述概念。
int k=1; void main(){ int i=1; char *j; static int m=1; char *n="hello";/*變量n位于棧上,其內容為一地址,指向位于文字常量區的"hello", 此時"hello"在內存中只有一份拷貝;而語句“char a[]="hello";”則不同, a是一個位于棧上的有6個元素(含字符串末尾的空字符)的數組,并將"hello" 拷貝到它所占的內存中,此時"hello"有兩份拷貝。*/ printf("棧區地址為:0X%x\n", &i); j=(char*)malloc(2); free(j);//及時釋放 printf("堆區地址為:0X%x\n", j); printf("全局變量地址為:0X%x\n", &k); printf("靜態變量地址為:0X%x\n", &m); printf("文字常量區地址為:0X%x\n", n); printf("程序區地址為:0X%x\n", &main); }