資源描述:
《c語(yǔ)言要點(diǎn)總結(jié)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。
1、.《C和指針》《C專家編程》《C陷阱與缺陷》《C語(yǔ)言編程要點(diǎn)》總結(jié)說(shuō)明:總結(jié)的知識(shí)點(diǎn)主要源于上面的4本書。--wuliming--2007-04-25wuliming_sc@163.com...指針和數(shù)組相關(guān)概念*************************************************字符與字符串的區(qū)別指針與數(shù)組1指針與數(shù)組2指針和數(shù)組的相同與不同用malloc為字符串分配存儲(chǔ)空間時(shí)的注意事項(xiàng)字符串常量用字符串常量初始化指針和數(shù)組二維數(shù)組下標(biāo)操作的相關(guān)概念指向一維、二維數(shù)組的指針arr
2、ay_name和&array_name的異同數(shù)組作為函數(shù)的參數(shù)時(shí),不能通過sizeof運(yùn)算符得到該數(shù)組的大小用strlen()求字符串的長(zhǎng)度‘char**’和‘constchar**’的兼容性問題空指針相關(guān)的問題NULL和NUL的區(qū)別未初始化的指針和NULL指針的區(qū)別理解函數(shù)的聲明函數(shù)參數(shù)的傳值調(diào)用函數(shù)指針作為函數(shù)參數(shù)的多維數(shù)組強(qiáng)制類型轉(zhuǎn)換相關(guān)概念malloc()、calloc()、realloc()...字符與字符串的區(qū)別(c缺陷與陷阱1.5節(jié))#includeintmain(){char
3、ch='abcdefghijklmnopqrstuvwxyz';charstr[]="abcdefghijklmnopqrstuvwxyz";printf("-----%c-----%s",ch,str);return0;}編譯該程序可以通過,但是會(huì)產(chǎn)生警告;輸出結(jié)過為:-----z-----...Abcdefghijklmnopqrstuvwxyz//在Dev-C++4.9.9.2編譯環(huán)境中可以通過,但是在VC.0中通不過指針與數(shù)組1(c缺陷與陷阱3.1節(jié))c語(yǔ)言中的數(shù)組值得注意的地方有以下兩點(diǎn):1
4、、c語(yǔ)言中只有一維數(shù)組,而且數(shù)組的大小必須在編譯期間就作為一個(gè)常數(shù)確定下來(lái)(C99標(biāo)準(zhǔn)允許變長(zhǎng)數(shù)組,GCC編譯器中實(shí)現(xiàn)了變長(zhǎng)數(shù)組)。然而,c語(yǔ)言中數(shù)組的元素可以是任何類型的對(duì)象,當(dāng)然也可以是另外一個(gè)數(shù)組。這樣,要仿真出一個(gè)多維數(shù)組就不是一件難事。2、對(duì)于一個(gè)數(shù)組,我們只能夠做兩件事:確定該數(shù)組的大小,以及獲得指向該數(shù)組下標(biāo)為0的元素的指針。其他有關(guān)數(shù)組的操作,哪怕它們乍看上去是以數(shù)組下標(biāo)進(jìn)行運(yùn)算的,實(shí)際上都是通過指針進(jìn)行的。換句話說(shuō),任何一個(gè)數(shù)組下標(biāo)運(yùn)算都等同于一個(gè)對(duì)應(yīng)的指針運(yùn)算,因此我們完全可以依據(jù)指針行為
5、定義數(shù)組下標(biāo)的行為?,F(xiàn)在考慮下面的例子:inti;int*p;intcalendar[12][31];上面聲明的calendar是一個(gè)數(shù)組,該數(shù)組擁有12個(gè)數(shù)組類型的元素,其中的每個(gè)元素都是一個(gè)擁有31個(gè)整型元素的數(shù)組。因此,sizeof(calendar)的值是:31×12×sizeof(int)??紤]一下,calendar[4]的含義是什么?因?yàn)閏alender是一個(gè)有著12個(gè)數(shù)組類型元素的數(shù)組,它的每個(gè)數(shù)組類型元素又是一個(gè)有著31個(gè)整型元素的數(shù)組,所以calendar[4]是calendar數(shù)組的第5個(gè)
6、元素,是calendar數(shù)組中12個(gè)有著31個(gè)整型元素的數(shù)組之一。因此,calendar[4]的行為也表現(xiàn)為一個(gè)有著31個(gè)整型元素的數(shù)組的行為。例如,sizeof(calendar[4])的結(jié)果是:31×sizeof(int)。又如,p=calendar[4];這個(gè)語(yǔ)句使指針p指向了數(shù)組calendar[4]中下標(biāo)為0的元素。因?yàn)閏alendar[4]是一個(gè)數(shù)組,我們可以通過下標(biāo)的形式來(lái)指定這個(gè)數(shù)組中的元素:i=calendar[4][7],這個(gè)語(yǔ)句也可以寫成下面這樣而表達(dá)的意思保持不變:i=*(calend
7、ar[4]+7),還可以進(jìn)一步寫成:i=*(*(calendar+4)+7)。下面我們?cè)倏矗簆=calendar;這個(gè)語(yǔ)句是非法的,因?yàn)閏alendar是一個(gè)二維數(shù)組,即“數(shù)組的數(shù)組”,在此處的上下文中使用calendar名稱會(huì)將其轉(zhuǎn)換為一個(gè)指向數(shù)組的指針。而p是一個(gè)指向整型變量的指針,兩個(gè)指針的類型不一樣,所以是非法的。顯然,我們需要一種聲明指向數(shù)組的指針的方法。intcalendar[12][31];int(*monthp)[31];monthp=calendar;int(*monthp)[31]語(yǔ)句聲明
8、的*monthp是一個(gè)擁有31個(gè)整型元素的數(shù)組,因此,monthp就是一個(gè)指向這樣的數(shù)組的指針。monthp指向數(shù)組calendar的第一個(gè)元素。...指針與數(shù)組2(c和指針.P141.)·1、數(shù)組的名的值是一個(gè)指針常量,不能試圖將一個(gè)地址賦值給數(shù)組名;·2、當(dāng)數(shù)組名作為sizeof操作符的操作數(shù)時(shí),sizeof(arrayname)返回的是整個(gè)數(shù)組的長(zhǎng)度,而不是指向數(shù)組的指針的長(zhǎng)度;·3、當(dāng)數(shù)組名