1、早用lint,勤用lint,不要等到最后才用lint。lint是軟件的道德標(biāo)準(zhǔn)
2、關(guān)于typedef。
先看一個(gè)聲明:void (*signal(int sig, void (*func)(int))) (int);
對(duì)于它,可以簡化為:
typedef void (*ptr_to_func) (int)
ptr_to_func signal(int, ptr_to_func)
對(duì)于像以上那個(gè)復(fù)雜的typedef聲明,你大可不必深入的去記憶、研究,只需要把它替代,化簡為一個(gè)聲明,那意義就豁然開朗了。
注意:
①不要在一個(gè)typedef中放入幾個(gè)聲明器;
②千萬不要把typedef嵌到聲明中間部分。
typedef與define的區(qū)別:
①可以用其他類型說明符對(duì)宏類型名進(jìn)行擴(kuò)展,但對(duì)typedef所定義的類型名卻不能這樣做。
②在連續(xù)聲明中,用typedef定義的類型能夠保證聲明中所有的變量均為同一種類型,而用#define定義的類型則無法保證。
3、數(shù)組與指針并不相同,某些情況下,他倆是一樣的,不過也存在情況,他倆不一樣例如:
文件1: int mango[100];
文件2: extern int * mango;
這是不同的,相當(dāng)于把整數(shù)和浮點(diǎn)數(shù)混為一談。
4、Turning實(shí)驗(yàn),人工智能,人機(jī)對(duì)話,都是十分有意思的東西。
5、堆區(qū)域用于動(dòng)態(tài)分配的存儲(chǔ),也就是通過malloc(內(nèi)存分配)函數(shù)獲得的內(nèi)存,并通過指針訪問。堆中所有東西都是匿名的————不能按名字直接訪問,只能通過指針間接訪問。
被分配的內(nèi)存總是經(jīng)過對(duì)齊,以適合及其尺寸的原子訪問。
堆的末端由一個(gè)稱為break的指針來標(biāo)識(shí)。當(dāng)堆管理器需要更多內(nèi)存時(shí),它可以通過系統(tǒng)調(diào)用brk和sbrk來移動(dòng)指針。一般情況下,不必自己顯示調(diào)用brk,如果分配的內(nèi)存容量很大,brk最終會(huì)被自動(dòng)調(diào)用。
2、關(guān)于typedef。
先看一個(gè)聲明:void (*signal(int sig, void (*func)(int))) (int);
對(duì)于它,可以簡化為:
typedef void (*ptr_to_func) (int)
ptr_to_func signal(int, ptr_to_func)
對(duì)于像以上那個(gè)復(fù)雜的typedef聲明,你大可不必深入的去記憶、研究,只需要把它替代,化簡為一個(gè)聲明,那意義就豁然開朗了。
注意:
①不要在一個(gè)typedef中放入幾個(gè)聲明器;
②千萬不要把typedef嵌到聲明中間部分。
typedef與define的區(qū)別:
①可以用其他類型說明符對(duì)宏類型名進(jìn)行擴(kuò)展,但對(duì)typedef所定義的類型名卻不能這樣做。
②在連續(xù)聲明中,用typedef定義的類型能夠保證聲明中所有的變量均為同一種類型,而用#define定義的類型則無法保證。
3、數(shù)組與指針并不相同,某些情況下,他倆是一樣的,不過也存在情況,他倆不一樣例如:
文件1: int mango[100];
文件2: extern int * mango;
這是不同的,相當(dāng)于把整數(shù)和浮點(diǎn)數(shù)混為一談。
4、Turning實(shí)驗(yàn),人工智能,人機(jī)對(duì)話,都是十分有意思的東西。
5、堆區(qū)域用于動(dòng)態(tài)分配的存儲(chǔ),也就是通過malloc(內(nèi)存分配)函數(shù)獲得的內(nèi)存,并通過指針訪問。堆中所有東西都是匿名的————不能按名字直接訪問,只能通過指針間接訪問。
被分配的內(nèi)存總是經(jīng)過對(duì)齊,以適合及其尺寸的原子訪問。
堆的末端由一個(gè)稱為break的指針來標(biāo)識(shí)。當(dāng)堆管理器需要更多內(nèi)存時(shí),它可以通過系統(tǒng)調(diào)用brk和sbrk來移動(dòng)指針。一般情況下,不必自己顯示調(diào)用brk,如果分配的內(nèi)存容量很大,brk最終會(huì)被自動(dòng)調(diào)用。