區域性變數僅在包含它的最內的大括號內有效;for迴圈中定義的變數僅在for迴圈內有效!在main()中定義的變數,不能在被調函式中使用(除全域性變數)。普通變數或指標變數間的賦值,非位址概念(不同的普通變數或不同的指標變數在記憶體中所分配的空間位址不同)!兩者間傳遞的是內容(對普通變數而言:內容僅僅是具體數值等;對指標變數而言:內容是其他變數位址)。
例 int a=5, int b= a; 系統為區域性變數a,b在棧區分配的空間位址不同;同理實參與形參之間單向值傳遞,系統在棧區重新給形參分配乙個臨時空間(形參函式呼叫完,形參空間被自動釋放),改變內容僅僅是改變形參的內容,並未影響到實參;所以不能試圖通過改變形參的內容改變實參!改變前言:程式在使用變數時,首先先找到該變數在棧中的位址,再將該位址中的內容返回!改變原理:通過傳遞該變數在記憶體中的位址,改變位址中的內容從而改變內容!常用方法: c語言指標;c++指標或引用,對於改變單個變數內容,也可通過函式返回值實現!
對於結構體變數或物件;也同樣是通過結構體指標或物件指標進行實參與形參傳遞,從而通過函式呼叫改變其內容;常見例子:鍊錶利用頭指標實現資料的增刪改查!
建立鍊錶時通常要使用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;
刪除某個結點一般通過尋找前驅結點的方法:令p->next->num = num; 找到該結點p->next, 前驅為p,從而刪除p->next:r結點;
常用排序方法(從小到大):氣泡排序:乙個乙個比並不斷根據排序要求把最小的數放最前面。。。;選擇排序:從第乙個數開始找,直到找到數中最小的數,把它和第乙個數交換位置,依次往後。。。;插入排序:抓牌法則(左手是已排好序的數,右手是新抓取的數,依次將新數從右至左依次與已排好的數比較,選擇插入適當的位置)。。。快速排序:選擇基數分割槽排序。。。歸併排序,堆排序等程式占用的記憶體區:棧區stack:系統自動分配,一般為區域性變數而分配空間!例 int a;堆區heap:用於動態記憶體分配,由程式設計師手動分配(malloc; new),手動釋放(free; delete),一般用於鍊錶分配空間!全域性區(亦稱靜態區static):用於全域性變數,靜態變數(static),以及常量(const)的空間分配!即在程式執行的整個過程中空間都存在!文字常量區(也稱字串常量區):用於給存放字串的變數 分配空間;例int *p = "world" 或 string ch= "world",給p和ch分配空間!程式**區:用於存放二進位制的**!
c語言學習心得
變數是程式可操作的儲存區的名稱。c中每個變數都有特定的型別,型別決定了變數儲存的大小和布局,該範圍內的值都可以儲存在記憶體中,運算子可應用於變數上。即告訴編譯器在何處建立變數的儲存,以及如何建立變數的儲存。變數定義指定乙個資料型別,幷包含了該型別的乙個或多個變數的列表。變數宣告向編譯器保證以指定的型...
c語言學習心得(3)
學習c語言已經一年多,對c也算得上半個入門者,期間也寫過一些自娛自樂的 其實個人認為無論學習什麼語言,最重要的是掌握習程式設計思想,然而c語言一種學習程式設計思想的基礎語言。所以,c語言的重要性不言而喻。一 課本 無論用的是什麼書,要學好c語言,把書上的每乙個例題 習題的 讀懂,這是學c最基本的要求...
初學C語言學習心得
hello!這是我的第一篇部落格,這裡是初學c語言的大三萌新,雖然大學以來一直都有在接觸c語言,但學習的都是一些比較基本的東西,隨著興趣的提公升我也開始認真的深入學習c語言,現在大約初步學習了兩周左右,從今天開始我會定期分享一些我學習c語言的學習心得與大家分享 目前使用的開發環境為 ubantu12...