您好,登錄后才能下訂單哦!
本篇內(nèi)容介紹了“C編程語(yǔ)言的重要知識(shí)點(diǎn)有哪些”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
在C語(yǔ)言中,您可以在類(lèi)型轉(zhuǎn)換中,運(yùn)算符內(nèi)部,函數(shù)聲明中聲明新類(lèi)型。sizeof
int a = sizeof(enum E { A, B, C }) + (enum X { D, E, F }) 0; enum E e = B; int b = e + F;
在C循環(huán)中,“頭”和循環(huán)體是兩個(gè)單獨(dú)的(嵌套的)作用域
for (int i = 0; i < 10; ++i) { int i = 42; // <-C語(yǔ)言中的OK,聲明其他局部變量 }
這不同于C ++,后者兩者都形成一個(gè)范圍。
可以在C中進(jìn)行[遞歸]調(diào)用main
在C語(yǔ)言中,可以在聲明中顯式地重復(fù)cv限定詞
const const const const int i = 42;
在C中,您可以在相同的翻譯單元中一次又一次地定義相同的文件作用域?qū)ο螅灰@些定義仍然是暫定的即可(不要多次包含初始化器)
int i; int i; int i, i, i, i;
與流行的看法相反,C不支持不同指針類(lèi)型之間以及整數(shù)和指針類(lèi)型之間的隱式轉(zhuǎn)換
int *p = 0; double *pd = p; //<-在C中不允許 char *pc = 123;// <-在C中不允許
但是支持隱式的指針往返轉(zhuǎn)換void *。
將運(yùn)算符應(yīng)用于可變修改后的類(lèi)型時(shí),將sizeof在運(yùn)行時(shí)對(duì)其進(jìn)行評(píng)估
int i = 0; sizeof(int [++ i]); //運(yùn)行時(shí)`sizeof`將使`i`遞增 int a [20]; sizeof(a [++ i]); //編譯時(shí)`sizeof`不會(huì)使`i`遞增
typedef用C -declaration實(shí)際上可以生成可執(zhí)行代碼,如果聲明為可變類(lèi)型(一個(gè)VLA)。因此,繞過(guò)該聲明進(jìn)入該聲明的范圍是非法的typedef
goto skip; int n = 42; typedef int A[n]; skip:;
即使main應(yīng)該聲明為返回int,也不需要顯式地return從中進(jìn)行任何操作int main()。如果控制從末尾流出main,則其行為就像return 0;
運(yùn)算符sizeof有兩種獨(dú)立的語(yǔ)法:一種用于類(lèi)型,另一種用于表達(dá)式。后者沒(méi)有()圍繞其論點(diǎn)
int a; sizeof a; // 不需要在`a`附近使用`()`
從C99語(yǔ)句(如if,等)開(kāi)始for,while創(chuàng)建自己的隱式塊。在C99塊之前,僅由的顯式對(duì)創(chuàng)建{}。
標(biāo)準(zhǔn)C從未允許人們?cè)诼暶髦型耆÷詃ecl-specifier-seq 。即使在具有“隱式int”規(guī)則的C89 / 90中,也無(wú)法將函數(shù)聲明為foo()。你可以做extern foo()或者const foo(),例如,而不是只foo()。
帶空的函數(shù)聲明()是K&R樣式的聲明。不建議使用K&R樣式的聲明。如果您的函數(shù)沒(méi)有參數(shù),則將其聲明為(void),而不是()。
函數(shù)聲明和函數(shù)原型不是一回事。在現(xiàn)代C語(yǔ)言中,需要使用函數(shù)聲明。但是功能原型不是。
即使在函數(shù)參數(shù)列表中,諸如int *array和的聲明int array[]通常是“等效的”,后一種形式仍要求數(shù)組元素類(lèi)型完整,而前一種則不需要
struct Incomplete; void foo(struct Incomplete *array); void bar(struct Incomplete array[]);
在函數(shù)參數(shù)列表中聲明指針時(shí),可以將指針本身聲明為 const
void foo(int *const array);
在C89 / 90中,使用參數(shù)聲明的“等效”數(shù)組形式時(shí),以前不可能聲明相同類(lèi)型的常數(shù)。但是,由于C99,可以通過(guò)const在[]
void bar(int array[const]); // 與?int * const array`相同
使用函數(shù)參數(shù)聲明的數(shù)組形式時(shí),數(shù)組的大小通常無(wú)關(guān)緊要
void foo(int array[5]); //等同于`int array []`。`5`被忽略。
但是,當(dāng)size帶有關(guān)鍵字時(shí),static它充當(dāng)編譯器的提示。它說(shuō)實(shí)際的數(shù)組至少會(huì)那么大。它可能/將改善編譯器優(yōu)化
void foo(int array [static 5]); //從類(lèi)型上講,它仍然等效于`int array []` //但是編譯器會(huì)提示
聲明為的位字段int不一定是帶符號(hào)的。這是C語(yǔ)言中的一個(gè)上下文,其中plainint不一定與相同signed int。一個(gè)int位字段可能被符號(hào)或無(wú)符號(hào)-這個(gè)行為應(yīng)該是實(shí)現(xiàn)定義的。因此,始終明確指定您的意圖始終是一個(gè)好習(xí)慣:將位字段明確聲明為signedor unsigned,而不是簡(jiǎn)單聲明int。
do … while是唯一以。結(jié)尾的迭代語(yǔ)句形式;。
在C語(yǔ)言中可以對(duì)類(lèi)型為Object的對(duì)象進(jìn)行非定義聲明 void
extern void v;
但是,由于類(lèi)型不完整,因此無(wú)法為該聲明提供匹配的定義void。
函數(shù)參數(shù)列表中提到的未知結(jié)構(gòu)類(lèi)型被視為新類(lèi)型的聲明。但是,此類(lèi)型的范圍僅限于該函數(shù)聲明。同一功能的下一個(gè)聲明將不可見(jiàn)或不知道它。例如,以下聲明序列乍一看“看起來(lái)不錯(cuò)”,但實(shí)際上是無(wú)效的
// 此時(shí)未聲明“ struct S”類(lèi)型 void foo(struct S *p); void foo(struct S *p) { }
struct S第一個(gè)聲明提到的類(lèi)型是原型的局部變量,與第二個(gè)聲明完全無(wú)關(guān)struct S。因此,這些函數(shù)聲明是沖突的。
“C編程語(yǔ)言的重要知識(shí)點(diǎn)有哪些”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。