暑假C語言學習總結之二

     我最近仍然以學習C語言爲主,學習的內容主要包括數組、指針、結構體和共用體,這些內容雖然以前都學過,不過對於當時僅僅算是入門,或者更差,通過這一週的學習後對這幾部分的綜合應用有了較深的體會,特別是剛開始對兔子生崽問題反覆研究了好幾遍纔對數組的運用較爲理解,以及在查找和排序時一維和二維數組的地址傳遞。在學習指針的時候,剛開始還對C語言爲什麼要使用指針感到困惑,一節一節學下來後才知道指針的重要性,而數組和指針聯合應用時其靈活性卻始終不太好把握。學習結構體和共用體時,終於對鏈表這個一直畏懼的數據結構有了更多的理解,不過只是學了單鏈表的相關操作,爲了更好的完成頭文件的小任務,我打算下週認真學習數據結構的鏈表部分。下面我彙報一下我覺得比較重要的知識點:
     1.數組問題:對於數組元素的排序,以前接觸到的只有冒泡法,而這次則又系統的學習了交換法和選擇法,其中印象比較深刻的就是選擇法中採用了標記最大(小)值的方法來減少交換的次數,從而提高了排序的效率。字符數組在使用scanf()函數時有幾點值得注意:數組名是數組的首地址,故前面不能再加&符;輸入字符串的長度應不超過字符數組定義的長度;空格、回車、跳格符因不能被讀入,輸入遇到這些字符時,系統認爲輸入結束。解決辦法可採用字符串處理函數gets()。
     2.指針:指針的重要作用有以下四點:(1).指針爲函數提供修改變量值的手段。(2).爲動態內存分配提供支持。(3).爲動態數據結構提供支持。(4).可以改善一些子程序的效率。另外值得注意的地方還有:指針必須經初奴化後才能使用、指針在增1和減1時其指針值是增、減(基類型)個字節。當指針採用如下方式(int *p = &a;)賦值時的理解,另外,二維數組的指針引用方式很值得注意,地址可以表示成(a[i]+j),則指針可表示成:*(*(a+i)+j)或者是(*(a+i))[j],對於採用指針下標(p[i*n+j]或*(p+i*n+j))引用的方法我仍然不是很理解,只能夠勉的記住。在學習到指針數組的時候我不得不感嘆其使用的靈活性,特別在處理多個字符串時相比二維數組有其無法代替的靈活性和高效性,此外,我還對指向指針的指針有了點的瞭解,它常常和指針數組結合起來使用,用於對多個字符處理的場合。我還看到了帶參數的main()函數,但對它的用法不是很瞭解。
     3.在學習結構體的時候,我也碰到了內存地址對齊的概念--偶數對齊,需要所有的數據類型從偶數地址開始存放來提高內存的訪問效率,所以在引用結構體的成員時不能按字節計算地址的方法依次訪問;如果想計算一個結構體實際所佔用的內存,需要使用sizeof去算符。結構體傳遞函數的方式有三種:傳遞單個成員、傳遞整個結構、傳遞指向結構的指針,其中第二種因佔用局部空間大,且具有單向值特性,故不常用。在鏈表的操作時往往要分是第一個節點、中間節點、最後一個節點,所以要特別注意。共用體採用開始地址對齊的方式分配地址空間。本章中還有一個比較重要的概念--位段,使程序按需分配內存(使用最少的位數)變成了可能,同時也可以實現既按字節進行訪問,也可以按位進行訪問,實現方法如下:先定義一個字節的結構體(bit_0~bit_7)八個成員,再定義一個共用體,讓上面的結構體和一個字節共佔同一個字節,此時就可以對共用體進行按字節或按位訪問了。

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