liunxC下零碎知识点的总结
1.簡述Makefile的作用
makefile關系到了整個工程的編譯規則。一個工程中的源文件不計數,其按類型、功能、模塊分別放在若干個目錄中,makefile定義了一系列的規則來指定,哪些文件需要先編譯,哪些文件需要后編譯,哪些文件需要重新編譯,甚至于進行更復雜的功能操作,因為makefile就像一個Shell腳本一樣,其中也可以執行操作系統的命令。
makefile帶來的好處就是——“自動化編譯”,一旦寫好,只需要一個make命令,整個工程完全自動編譯,極大的提高了軟件開發的效率。
2.sizeof與strlen的區別:
sizeof(…)是運算符,在頭文件中typedef為unsigned int,其值在編譯時即計算好了,參數可以是數組、指針、類型、對象、函數等。
它的功能是:獲得保證能容納實現所建立的最大對象的字節大小。
strlen(…)是函數,要在運行時才能計算。參數必須是字符型指針(char*)。當數組名作為參數傳入時,實際上數組就退化成指針了。
它的功能是:返回字符串的長度。該字符串可能是自己定義的,也可能是內存中隨機的,該函數實際完成的功能是從代表該字符串的第一個地址開始遍歷,直到遇到結束符NULL。返回的長度大小不包括NULL。
3.什么是野指針?如何避免野指針。
野指針:指向不確定地址的指針變量。避免方法:
1.不去訪問沒有權限的內存(平時我們正確使用指針的時候,系統應經將相應的內存分配給用戶,但是如果指向沒有分配的內存,系統會判定我們沒有權限)
2.不去訪問已經釋放了的內存
4.c語言分配內存的方式有哪些?
c語言中常見的內存錯誤有哪些?
分配內存:1、從靜態存儲區域分配。內存在程序編譯的時候就已經分配好,這塊內存在程序的整個運行期間都存在,例如全局變量,static變量。
2、在棧上創建。在執行函數時,函數內局部變量的存儲單元都可以在棧上創建,函數執行結束時這些存儲單元自動被釋放,棧內存分配運算內置于處理器的指令集中,效率很高,凡是分配的內存容量有限。
3、從堆上分配。也稱動態內存分配。程序在運行的時候用malloc或者new申請任意多少的內存,程序員自己負責在何時用free或者delete釋放內存。動態內存的生存期有程序員決定,使用非常靈活,但如果在堆上分配了空間,就有責任回收他。否則運行的程序會出現內存泄漏,頻繁的分配和釋放不同大小的堆空間將會產生堆內碎塊。
內存錯誤:1、指針沒有指向一塊合法的內存 2、為地址分配的內存太小 3、內存分配成功,但并未初始化 4、內存越界 5、內存泄漏 6、內存已經釋放,但是繼續通過指針來使用
5.Static全局變量與普通變量的區別?
Static局部變量與普通局部變量的區別?
static函數與普通函數的區別?
static全局變量與普通的全局變量的區別:static全局變量只初使化一次,防止在其他文件單元中被引用;
static局部變量和普通局部變量的區別:static局部變量只被初始化一次,下一次依據上一次結果值;
static函數與普通函數的區別:static函數在內存中只有一份,普通函數在每個被調用中維持一份拷貝
6.#include <> 和 #include “” 有什么區別?
#include< >引用的是編譯器的類庫路徑里面的頭文件。
#include“ ”引用的是你程序目錄的相對路徑中的頭文件。
7.char *const p; char const *p; const char p 三者的區別。
第一個和第三個是一樣的, p都是指向const char類型的指針, 不可以賦值給p, 就是不可通過這個指針改變它指向的值.
第二個: char * const p是指向char的常指針, 指針需在聲明時就初始化, 之后不可以改變它的指向.
總結
以上是生活随笔為你收集整理的liunxC下零碎知识点的总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux--gdb调试
- 下一篇: gets与fgets,puts与fput