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