學習C 趟過的坑

2021-09-10 22:34:26 字數 1564 閱讀 7279

1、使用 pow sqrt 庫的時候 一定記得轉型 float 否則會缺失精度;

2、char 指標容易犯的誤區(原c語言宣告字串的方法);

int main()

陣列名可以理解為陣列開闢的一塊連續空間的首位址 但也不完全是首位址

int temp_ array[5];

int *ptr_ temp_array = temp_array; // 定義乙個整型指標變數;用來存放陣列 temp_array 的首位址;

sizeof(temp_array); // >>> 20(4*5)

sizeof(ptr_temp_array) // >>> 4 含義即是地值所佔的位元組 一般來說作業系統的第值是以十六進製制來表示的位址 如00ffaa; 所以佔四個位元組;

使用指標一定避免指標懸掛 // 野指標

int *ptr_int_value = new int; // new 關鍵字申請記憶體後 返回的是記憶體位址;

ptr_int_value++; // 盲目加加 使得指標指向位址偏移 原來的位址存放的數便沒有指標指向 這樣便會造成記憶體益處;

/因為 new關鍵字使用的時候是在程式占用記憶體 的堆區 申請開闢的一塊記憶體 所以造成 指標懸掛後 原記憶體 位址占用的空間可能不會被作業系統** (危險:)/

delete ptr_int_value; // 在使用 new 關鍵字後 如果該記憶體位址的值不在會被使用 請及時清理;

使用new 關鍵字 定義陣列 指標時因該如下定義:

int *array = new int[5] ;//定義了乙個容量為5 的整型陣列 並將陣列的首位址賦給array 指標變數;

delete array; // 釋放記憶體時 應採用這種特殊的方法 不過最新版的已經可以直接使用 delete 關鍵字進行直接釋放;

定義指標變數時一定注意 賦初值:

// 沒有初值也一定 使用 nullptr 字面量進行賦初值;

int *ptr = nullptr;

int *ptr2 = 0; // 與上面個的方法是完全一樣的 nullptr 的字面量就是 0;

/在定義指標變數的時候如果沒有給指標變數賦初值那麼 系統預設還是會給一指標乙個初始位址;這樣如果直接修改指標變數所指位址的值 那麼就不知到修改的系統的什麼值 就非常危險 慎重!;/

3、程式的記憶體分配:

?棧區(stack)

→ 由編譯器自動分配釋放,一般存放函式的引數值、區域性變數值等;

→ 操作方式類似資料結構種的棧 - 先進後出;

?堆區(heap)

→ 一般由程式設計師分配釋放,若程式設計師不釋放,程式結束時可能會由作業系統進行**;

→ 注意: 與資料結構中的堆是兩回事 分配的方式類似於鏈;

?全域性區(靜態區-static)

→ 全域性變數和靜態變數是儲存在一起的;

→ 程式結束後由系統自行釋放;

?文字常量區

→ 常量字串就放在這裡,程式結束由系統自行釋放;

?程式**區

→ 存放程式**的 二進位制格式;

mysql趟過的坑

q 使用limit報錯,如select from table where id in select id from table limit 12 會報this version of mysql doesn t yet support limit in all any some subquery a ...

Android O 趟過的那些坑

日曆適配android o 許可權write calendar read calendar兩個許可權是一組,只要申請了write許可權read許可權自動就給了 但是現在不是,需要read write許可權都要申請,雖然 呼叫介面的時候,介面上許可權的 dialog不別顯示wirte read許可權的...

微信支付趟過的坑

更新 2015 01 26 更新 2015 01 30 sudo yum install ca certificates service php fpm restart 更新 2015 02 27 今天支付接入了 相關邏輯,寫完後,我又測試了以前的會員卡支付的,發現在支付階段提示失敗,於是加上測試語...