C/C++基礎知識整理彙總

1、程序的內存分配
(1)棧區(stack) 由編譯器自動分配釋放,存放函數的參數值,局部變量的值等。其操作方式類似於數據結構中的棧。
(2)堆區(heap) 一般由程序員分配釋放,若程序員不釋放,程序結束時可能由OS回收。注意它與數據結構中的堆是兩回事,分配方式倒是類似於鏈表。
(3)**全局區(靜態區)(static)**全局變量和靜態變量的存儲是放在一塊的,初始化的全局變量和靜態變量在一塊區域,未初始化的全局變量和未初始化的靜態變量在相鄰的另一塊區域。程序結束後由系統釋放。
(4)文字常量區 常量字符串就是放在這裏的。程序結束後由系統釋放。
(5)程序代碼區 存放函數體的二進制代碼

//main.cpp
int a=0; //全局初始化區
char *p1; //全局未初始化區 
main()
{
intb;char s[]=”abc”; //棧
char *p2; //棧
char *p3=123456; //123456\0在常量區,p3在棧上。
static int c=0//全局(靜態)初始化區
p1 = (char*)malloc(10);
p2 = (char*)malloc(20); //分配得來得10和20字節的區域就在堆區。
strcpy(p1,123456); //123456\0放在常量區,編譯器可能會將它與p3所向”123456″優化成一個地方。
}

2、什麼是預編譯?何時需要預編譯?
(1)預編譯又稱預處理,是做些代碼文本的替換工作,即程序執行前的一些預處理工作。主要處理#開頭的指令,如拷貝#include包含的文件代碼、替換#define定義的宏、條件編譯#if等。
(2)何時需要預編譯:
a、總是使用不經常改動的大型代碼體;
b、程序由多個模塊組成,所有模塊都使用一組標準的包含文件和相同的編譯選項。在這種情況下,可以將所有包含文件預編譯爲一個預編譯頭。

3、關鍵字static的作用是什麼?
(1)在函數體,一個被聲明爲靜態的變量在這一函數被調用過程中維持其值不變。
(2)在模塊內(但在函數體外),一個被聲明爲靜態的變量可以被模塊內所用函數訪問,但不能被模塊外其它函數訪問。它是一個本地的全局變量。
(3) 在模塊內,一個被聲明爲靜態的函數只可被這一模塊內的其它函數調用。那就是,這個函數被限制在聲明它的模塊的本地範圍內使用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章