----------------------
asp.net+unity開發、.net培訓、
期待與您交流! ----------------------
一、儲存劃分
1、在c語言中,儲存區大致分為5類:棧、堆、靜態區、常量區、**區。
2、棧1)由編譯器自動分配和釋放
2)在函式體中定義的變數通常在棧上
3)棧中的變數先進後出
4)棧中的變數一般出了函式會被釋放
3、堆1)一般由程式設計師分配和釋放,若程式設計師不釋放,程式結束時由os釋放
2)用malloc、calloc、realloc等分配記憶體的函式分配得到的就在堆上
3)釋放堆記憶體free()
4、全域性區(靜態區)
1)全域性變數和靜態變數的儲存是放在一塊的
2)初始化的全域性變數和靜態變數在一塊區域
3)未初始化的全域性變數和未初化的靜態變數在相鄰的另一塊區域
4)程式結束釋放
5、常量區
1)專門存放常量的地方
2)例如13,'a',-3.8,"fhkad"
3)程式結束釋放
6、**區
1)存放二進位制**的區域
2)函式通常會被編譯成二進位制**,儲存在**區
3)函式被呼叫的時候,會從**區取出,函式需要的引數以及函式體中的變數,會在棧裡臨時分配,函式結束時,變數會被釋放
二、指標賦值
1、c語言允許使用賦值運算子進行指標的複製,前提是兩個指標具有相同的型別
三、指標做為引數
1、指標作為引數的作用
2、定義乙個交換兩個整形變數的值的函式。如果定義成以下形式:
3、函式傳參的過程:把實際引數的值拷貝到形式引數:
四、指標作為返回值
1、我們不僅可以為函式傳遞指標,還可以編寫返回指標的函式
2、函式可以返回指向外部變數或指向宣告為static的區域性變數的指標
3、注意:
永遠不要返回指向自動區域性變數的指標。函式結束後,區域性變數就不存在了,所以指向區域性變數的指標是無效的
五、動態記憶體分配:
1、malloc()函式 在執行時分配記憶體的最簡單的標準庫函式是malloc()。使用這個函式時,需要在程式中包含標頭檔案。使用malloc()函式需指定要分配的記憶體位元組數作為引數。這個函式返回所分配記憶體的第乙個位元組的位址。因為返回的是乙個位址,所以這裡可以使用指標。
動態記憶體分配的乙個例子如下:
int *pnumber = (int *)malloc(100);
這條語句請求100個位元組的記憶體,並把這個記憶體塊的位址賦予pnumber。只要不修改它,任何時間使用這個變數pnumber,它都會指向所分配的100個位元組的第乙個int的位置。這個記憶體塊能儲存25個int值,每個int佔4個位元組。
注意,型別轉換(int*)將函式返回的位址轉換成int型別的指標。這麼做是因為malloc()是一般用途的函式,可為任何型別的資料分配記憶體。這個函式不知道要這個記憶體作什麼用,所以它返回的是乙個void型別的指標,寫做void*。型別void*的指標可以指向任意型別的資料,然而不能取消對void指標的引用,因為它指向未具體說明的物件。許多編譯器會把malloc()返回的位址自動轉換成適當的型別,且不會傷害具體指定的物件。
可以請求任意數量的位元組,位元組數僅受制於計算機中未用的記憶體以及malloc()的運用場合。如果因某種原因而不能分配請求的記憶體,malloc()會返回乙個null指標。這個指標等於0。最好先用if語句檢查請求動態分配的記憶體是否已分配,再使用它。就如同金錢,沒錢又想花費,會帶來災難性的後果。因此,應編寫如下語句:
if(pnumber == null)
如果指標是null,最好執行適當的操作。例如,至少可以顯示一條資訊"記憶體不足",然後中止程式。這比允許程式繼續執行,使之使用null位址儲存資料導致崩潰要好得多。然而,在某些情況下,可以釋放在別的地方使用的記憶體,以便程式有足夠的記憶體繼續執行下去。
2、分配記憶體時使用sizeof運算子
前乙個例子很不錯,但我們不常處理位元組,而常常處理int、double等資料型別。例如給75個int型別的資料項分配記憶體,可以使用以下的語句:
pnumber = (int *)malloc(75*sizeof(int));
如前所述,sizeof是乙個運算子,它返回乙個size_t型別的無符號整數,該整數是儲存它的引數需要的位元組數。它把關鍵字如int或float等作為引數,返回儲存該型別的資料項所需的位元組數。它的引數也可以是變數或陣列名。把陣列名作為引數時,sizeof返回儲存整個陣列所需的位元組數。前乙個例子請求分配足以儲存75個int資料項的記憶體。以這種方式使用sizeof,可以根據不同的c編譯器為int型別的值自動調整所需的記憶體空間。
----------------------
asp.net+unity開發、.net培訓、
期待與您交流! ----------------------
黑馬程式設計師 C語言 指標
asp.net android ios開發 net培訓 期待與您交流!指標 指標是c語言中非常重要的資料型別 指標變數的定義 int p int是指標指向資料的型別 p是指標變數名稱 只是用來表示變數為指標變數 指標的使用 int a 10 int p p a 或者p a 表示將變數a的記憶體位址賦...
黑馬程式設計師 c語言指標
ios培訓 android培訓 期待與您交流!指標的定義 定義指標和定義乙個變數類似 資料型別 指標變數名 如 int p 表示定義乙個指向整形變數的指標 使用如下 int a 8 int p p a 指標變數 p中存放a的位址,可以通過p中存放的位址,可以訪問變數a中的值。訪問指標變數中存放的位址...
黑馬程式設計師 C語言 指標
一.指標的基本概念 number 10 是什麼意思呢?1.通過number這個位址,找到他指向的空間 2.到這個空間裡,取出裡面儲存的值 普通變數基本格式 變數型別 變數名 指標變數基本格式 變數型別 指標變數名 指標裡面存的是別的變數的位址 p來列印值是0x開頭的,16進製制數字 指標變數在記憶體...