C語言學習心得

言覃先生發表於2018-06-09

  1.   區域性變數僅在包含它的最內的大括號內有效;for迴圈中定義的變數僅在for迴圈內有效!在main()中定義的變數,不能在被調函式中使用(除全域性變數)。
  2. 普通變數或指標變數間的賦值,非地址概念(不同的普通變數或不同的指標變數在記憶體中所分配的空間地址不同)!兩者間傳遞的是內容(對普通變數而言:內容僅僅是具體數值等;對指標變數而言:內容是其他變數地址)。
  3. 例 int a=5, int b= a;   系統為區域性變數a,b在棧區分配的空間地址不同;同理實參與形參之間單向值傳遞,系統在棧區重新給形參分配一個臨時空間(形參函式呼叫完,形參空間被自動釋放),改變內容僅僅是改變形參的內容,並未影響到實參;所以不能試圖通過改變形參的內容改變實參!    改變前言:程式在使用變數時,首先先找到該變數在棧中的地址,再將該地址中的內容返回!    改變原理:通過傳遞該變數在記憶體中的地址,改變地址中的內容從而改變內容!   常用方法:  C語言指標;C++指標或引用,對於改變單個變數內容,也可通過函式返回值實現!
  4.  對於結構體變數或物件;也同樣是通過結構體指標或物件指標進行實參與形參傳遞,從而通過函式呼叫改變其內容;常見例子:連結串列利用頭指標實現資料的增刪改查!
  5. 建立連結串列時通常要使用malloc函式在堆區為新結點動態分配空間,struct stu* pNew = (struct stu*)malloc(sizeof(struct stu));該函式返回值是動態分配的總空間的首地址;連結串列指標 p->next, 僅僅指的是p所指向的結構體的next的內容(其內容指的是下一個結點首地址),所以在刪除結點時不能通過free(p->next)刪除(錯誤!因為刪除後就無法知道它的下個結點),必須先儲存再刪除;一般引入新指標struct stu *r = p ->next;  p->next = r->next; free(r); 同時在free(r)時,釋放的是r所指向結點的記憶體,r本身並沒有釋放,一般嚴謹的話,為避免野指標的出現可以令 r->next = NULL;
  6. 刪除某個結點一般通過尋找前驅結點的方法:令p->next->num = num; 找到該結點p->next, 前驅為p,從而刪除p->next:r結點;
  7. 常用排序方法(從小到大):氣泡排序:一個一個比並不斷根據排序要求把最小的數放最前面。。。;選擇排序:從第一個數開始找,直到找到數中最小的數,把它和第一個數交換位置,依次往後。。。;插入排序:抓牌法則(左手是已排好序的數,右手是新抓取的數,依次將新數從右至左依次與已排好的數比較,選擇插入適當的位置)。。。快速排序:選擇基數分割槽排序。。。歸併排序,堆排序等
  8. 程式佔用的記憶體區:棧區stack:系統自動分配,一般為區域性變數而分配空間!例 int a;        堆區heap:用於動態記憶體分配,由程式設計師手動分配(malloc; new),手動釋放(free; delete),一般用於連結串列分配空間!        全域性區(亦稱靜態區static):用於全域性變數,靜態變數(static),以及常量(const)的空間分配!即在程式執行的整個過程中空間都存在!        文字常量區(也稱字串常量區):用於給存放字串的變數 分配空間;例int *p = "world"  或 string ch= "world",給p和ch分配空間!         程式程式碼區:用於存放二進位制的程式碼! 

相關文章