c語言冷知識有哪些_C語言知識點(diǎn)歸納 IT知識
電腦知識 由優(yōu)爾供稿C語言不但執(zhí)行效率高而且可移植性好,可以用來開發(fā)應(yīng)用軟件、驅(qū)動、操作系統(tǒng)等。C語言也是其它眾多高級語言的鼻祖語言,所以說學(xué)習(xí)C語言是進(jìn)入編程世界的必修課。下面是9252兒童網(wǎng)小編為大家整理的c語言冷知識,希望對你們有幫助。
C語言冷知識
C語言屬強(qiáng)類型語言
(1)編程語言分2種:強(qiáng)類型語言和弱類型語言。強(qiáng)類型語言中所有的變量都有自己固定的類型,這個類型有固定的內(nèi)存占用,有固定的解析方法;弱類型語言中沒有類型的概念,所有變量全都是一個類型(一般都是字符串的),程序在用的時候再根據(jù)需要來處理變量。
(2)C語言就是典型的強(qiáng)類型語言,C語言中所有的變量都有明確的類型。因?yàn)镃語言中的一個變量都要對應(yīng)內(nèi)存中的一段內(nèi)存,編譯器需要這個變量的類型來確定這個變量占用內(nèi)存的字節(jié)數(shù)和這一段內(nèi)存的解析方法。
4.8.4.3、void類型的本質(zhì)
(1)void類型的正確的含義是:不知道類型,不確定類型,還沒確定類型。
(2)void a;定義了一個void類型的變量,含義就是說a是一個變量,而且a肯定有確定的類型,只是目前我還不知道a的類型,還不確定,所以標(biāo)記為void。
4.8.4.4、為什么需要void類型
(1)什么情況下需要void類型?其實(shí)就是在描述一段還沒有具體使用的內(nèi)存時需要使用void類型。
(2)void的一個典型應(yīng)用案例就是malloc的返回值。我們知道m(xù)alloc函數(shù)向系統(tǒng)堆管理器申請一段內(nèi)存給當(dāng)前程序使用,malloc返回的是一個指針,這個指針指向申請的那段內(nèi)存。malloc剛申請的這段內(nèi)存尚未用來存儲數(shù)據(jù),malloc函數(shù)也無法預(yù)知這段內(nèi)存將來被存放什么類型的數(shù)據(jù),所以malloc無法返回具體類型的指針,解決方法就是返回一個void 類型,告訴外部我返回的是一段干凈的內(nèi)存空間,尚未確定類型。所以我們在malloc之后可以給這段內(nèi)存讀寫任意類型的數(shù)據(jù)。
(3)void 類型的指針指向的內(nèi)存是尚未確定類型的,因此我們后續(xù)可以使用強(qiáng)制類型轉(zhuǎn)換強(qiáng)行將其轉(zhuǎn)為各種類型。這就是void類型的最終歸宿,就是被強(qiáng)制類型轉(zhuǎn)換成一個具體類型。
(4)void類型使用時一般都是用void ,而不是僅僅使用void。
C語言小知識
基本數(shù)據(jù)類型
void:聲明函數(shù)無返回值或無參數(shù),聲明無類型指針,顯示丟棄運(yùn)算結(jié)果。(C89標(biāo)準(zhǔn)新增)
char:字符型類型數(shù)據(jù),屬于整型數(shù)據(jù)的一種。(K&R時期引入)
int:整型數(shù)據(jù),表示范圍通常為編譯器指定的內(nèi)存字節(jié)長。(K&R時期引入)
float:單精度浮點(diǎn)型數(shù)據(jù),屬于浮點(diǎn)數(shù)據(jù)的一種。(K&R時期引入)
double:雙精度浮點(diǎn)型數(shù)據(jù),屬于浮點(diǎn)數(shù)據(jù)的一種。(K&R時期引入)
_Bool:布爾型(C99標(biāo)準(zhǔn)新增)
_Complex:復(fù)數(shù)的基本類型(C99標(biāo)準(zhǔn)新增)
_Imaginary:虛數(shù),與復(fù)數(shù)基本類型相似,沒有實(shí)部的純虛數(shù)(C99標(biāo)準(zhǔn)新增)
_Generic:提供重載的接口入口(C11標(biāo)準(zhǔn)新增)
類型修飾關(guān)鍵字
short:修飾int,短整型數(shù)據(jù),可省略被修飾的int。(K&R時期引入)
long:修飾int,長整型數(shù)據(jù),可省略被修飾的int。(K&R時期引入)
long long:修飾int,超長整型數(shù)據(jù),可省略被修飾的int。(C99標(biāo)準(zhǔn)新增)
signed:修飾整型數(shù)據(jù),有符號數(shù)據(jù)類型。(C89標(biāo)準(zhǔn)新增)
unsigned:修飾整型數(shù)據(jù),無符號數(shù)據(jù)類型。(K&R時期引入)
restrict:用于限定和約束指針,并表明指針是訪問一個數(shù)據(jù)對象的唯一且初始的方式。(C99標(biāo)準(zhǔn)新增)
復(fù)雜類型關(guān)鍵字
struct:結(jié)構(gòu)體聲明。(K&R時期引入)
union:聯(lián)合體聲明。(K&R時期引入)
enum:枚舉聲明。(C89標(biāo)準(zhǔn)新增)
typedef:聲明類型別名。(K&R時期引入)
sizeof:得到特定類型或特定類型變量的大小。(K&R時期引入)
inline:內(nèi)聯(lián)函數(shù)用于取代宏定義,會在任何調(diào)用它的地方展開。(C99標(biāo)準(zhǔn)新增)
存儲級別關(guān)鍵字
auto:指定為自動變量,由編譯器自動分配及釋放。通常在棧上分配。與static相反。當(dāng)變量未指定時默認(rèn)為auto。(K&R時期引入)
static:指定為靜態(tài)變量,分配在靜態(tài)變量區(qū),修飾函數(shù)時,指定函數(shù)作用域?yàn)槲募?nèi)部。(K&R時期引入)
register:指定為寄存器變量,建議編譯器將變量存儲到寄存器中使用,也可以修飾函數(shù)形參,建議編譯器通過寄存器而不是堆棧傳遞參數(shù)。(K&R時期引入)
extern:指定對應(yīng)變量為外部變量,即標(biāo)示變量或者函數(shù)的定義在別的文件中,提示編譯器遇到此變量和函數(shù)時在其他模塊中尋找其定義。(K&R時期引入)
const:指定變量不可被當(dāng)前線程改變(但有可能被系統(tǒng)或其他線程改變)。(C89標(biāo)準(zhǔn)新增)
volatile:指定變量的值有可能會被系統(tǒng)或其他線程改變,強(qiáng)制編譯器每次從內(nèi)存中取得該變量的值,阻止編譯器把該變量優(yōu)化成寄存器變量。(C89標(biāo)準(zhǔn)新增)
流程控制關(guān)鍵字
跳轉(zhuǎn)結(jié)構(gòu)
return:用在函數(shù)體中,返回特定值(如果是void類型,則不返回函數(shù)值)。(K&R時期引入)
continue:結(jié)束當(dāng)前循環(huán),開始下一輪循環(huán)。(K&R時期引入)
break:跳出當(dāng)前循環(huán)或switch結(jié)構(gòu)。(K&R時期引入)
goto:無條件跳轉(zhuǎn)語句。(K&R時期引入)
分支結(jié)構(gòu)
if:條件語句,后面不需要放分號。(K&R時期引入)
else:條件語句否定分支(與if連用)。(K&R時期引入)
switch:開關(guān)語句(多重分支語句)。(K&R時期引入)
case:開關(guān)語句中的分支標(biāo)記,與switch連用。(K&R時期引入)
default:開關(guān)語句中的“其他”分支,可選。(K&R時期引入)
編譯
#define 預(yù)編譯宏
#if 表達(dá)式 #else if 表達(dá)式 #else #endif 條件編譯
#ifdef 宏 #else #endif 條件編譯
#ifndef 宏 #else #endif 條件編譯與條件編譯
語法結(jié)構(gòu)
選擇結(jié)構(gòu)
順序結(jié)構(gòu)的程序雖然能解決計算、輸出等問題,但不能做判斷再選擇。對于要先做判斷再選擇的問題就要使用選擇結(jié)構(gòu)。選擇結(jié)構(gòu)的執(zhí)行是依據(jù)一定的'條件選擇執(zhí)行路徑,而不是嚴(yán)格按照語句出現(xiàn)的物理順序。選擇結(jié)構(gòu)的程序設(shè)計方法的關(guān)鍵在于構(gòu)造合適的分支條件和分析程序流程,根據(jù)不同的程序流程選擇適當(dāng)?shù)倪x擇語句。選擇結(jié)構(gòu)適合于帶有邏輯或關(guān)系比較等條件判斷的計算,設(shè)計這類程序時往往都要先繪制其程序流程圖,然后根據(jù)程序流程寫出源程序,這樣做把程序設(shè)計分析與語言分開,使得問題簡單化,易于理解。程序流程圖是根據(jù)解題分析所繪制的程序執(zhí)行流程圖。[23]
循環(huán)結(jié)構(gòu)
循環(huán)結(jié)構(gòu)可以減少源程序重復(fù)書寫的工作量,用來描述重復(fù)執(zhí)行某段算法的問題,這是程序設(shè)計中最能發(fā)揮計算機(jī)特長的程序結(jié)構(gòu),C語言中提供四種循環(huán),即goto循環(huán)、while循環(huán)、do while循環(huán)和for循環(huán)。四種循環(huán)可以用來處理同一問題,一般情況下它們可以互相代替換,但一般不提倡用goto循環(huán),因?yàn)閺?qiáng)制改變程序的順序經(jīng)常會給程序的運(yùn)行帶來不可預(yù)料的錯誤。
特別要注意在循環(huán)體內(nèi)應(yīng)包含趨于結(jié)束的語句(即循環(huán)變量值的改變),否則就可能成了一個死循環(huán),這是初學(xué)者的一個常見錯誤。
三個循環(huán)的異同點(diǎn):用while和do…while循環(huán)時,循環(huán)變量的初始化的操作應(yīng)在循環(huán)體之前,而for循環(huán)一般在語句1中進(jìn)行的;while循環(huán)和for循環(huán)都是先判斷表達(dá)式,后執(zhí)行循環(huán)體,而do…while循環(huán)是先執(zhí)行循環(huán)體后判斷表達(dá)式,也就是說do…while的循環(huán)體最少被執(zhí)行一次,而while循環(huán)和for就可能一次都不執(zhí)行。另外還要注意的是這三種循環(huán)都可以用break語句跳出循環(huán),用continue語句結(jié)束本次循環(huán),而goto語句與if構(gòu)成的循環(huán),是不能用break和 continue語句進(jìn)行控制的。
順序結(jié)構(gòu)、分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)并不彼此孤立的,在循環(huán)中可以有分支、順序結(jié)構(gòu),分支中也可以有循環(huán)、順序結(jié)構(gòu),其實(shí)不管哪種結(jié)構(gòu),均可廣義的把它們看成一個語句。在實(shí)際編程過程中常將這三種結(jié)構(gòu)相互結(jié)合以實(shí)現(xiàn)各種算法,設(shè)計出相應(yīng)程序,但是要編程的問題較大,編寫出的程序就往往很長、結(jié)構(gòu)重復(fù)多,造成可讀性差,難以理解,解決這個問題的方法是將C程序設(shè)計成模塊化結(jié)構(gòu)
順序結(jié)構(gòu)
順序結(jié)構(gòu)的程序設(shè)計是最簡單的,只要按照解決問題的順序?qū)懗鱿鄳?yīng)的語句就行,它的執(zhí)行順序是自上而下,依次執(zhí)行。
例如:a = 3,b = 5,現(xiàn)交換a,b的值,這個問題就好像交換兩個杯子水,這當(dāng)然要用到第三個杯子,假如第三個杯子是c,那么正確的程序?yàn)椋篶 = a; a = b; b = c;執(zhí)行結(jié)果是a = 5,b = c = 3如果改變其順序,寫成:a = b; c = a; b =c;則執(zhí)行結(jié)果就變成a = b = c = 5,不能達(dá)到預(yù)期的目的,初學(xué)者最容易犯這種錯誤。順序結(jié)構(gòu)可以獨(dú)立使用構(gòu)成一個簡單的完整程序,常見的輸入、計算,輸出三步曲的程序就是順序結(jié)構(gòu),例如計算圓的面積,其程序的語句順序就是輸入圓的半徑r,計算s = 3.14159*r*r,輸出圓的面積s。不過大多數(shù)情況下順序結(jié)構(gòu)都是作為程序的一部分,與其它結(jié)構(gòu)一起構(gòu)成一個復(fù)雜的程序,例如分支結(jié)構(gòu)中的復(fù)合語句、循環(huán)結(jié)構(gòu)中的循環(huán)體等。
C語言知識點(diǎn)歸納
1、C語言程序是由多個函數(shù)構(gòu)成的。
2、每個C語言程序中有且只有一個main函數(shù)。
3、C語言不使用行號,無程序行的概念。
4、程序中可使用空行和空格。
5、C語言程序格式常用鋸齒形書寫格式。
6、C語言程序中可加任意多的注釋,注釋形式/*……*/,并且注釋形式不能嵌套,即不能注釋里面又有另一個注釋。//行注釋是C++當(dāng)中新增加的內(nèi)容。
7、引用C語言標(biāo)準(zhǔn)庫函數(shù),一般要用文件包含預(yù)處理命令將其頭文件包含進(jìn)來。
8、用戶自定義的函數(shù),必須先定義后使用。
9、變量必須先定義后使用。
10、變量名,函數(shù)名必須是合法的標(biāo)識符,標(biāo)識符習(xí)慣用小寫字母,C語言是字母大小寫敏感的語言。
11、不能用關(guān)鍵字來命名變量和函數(shù)。
12、C語言的語句都是以分號結(jié)尾的。
13、計算機(jī)中使用的進(jìn)制數(shù)是二進(jìn)制數(shù),而不是十進(jìn)制數(shù),因?yàn)槎M(jìn)制只有兩個數(shù)碼,運(yùn)算簡單便于硬件實(shí)現(xiàn),同時二進(jìn)制便于邏輯運(yùn)算。將十進(jìn)制數(shù)轉(zhuǎn)換成二進(jìn)制數(shù)應(yīng)分為整數(shù)部分轉(zhuǎn)換和小數(shù)部分轉(zhuǎn)換,整數(shù)部分轉(zhuǎn)換可采用基數(shù)除法來實(shí)現(xiàn),小數(shù)部分轉(zhuǎn)換可采用基數(shù)乘法來實(shí)現(xiàn)。八進(jìn)制和十六進(jìn)制也是C語言中經(jīng)常表示數(shù)據(jù)的進(jìn)制,因?yàn)樗鼈兣c二進(jìn)制之間的轉(zhuǎn)換非常方便,但要注意他們不是計算機(jī)中使用的進(jìn)制。
14、機(jī)器數(shù)的表示形式有原碼、反碼和補(bǔ)碼幾種形式,計算機(jī)中通常使用補(bǔ)碼的形式來表示一個數(shù),因?yàn)檠a(bǔ)碼運(yùn)算可以連同符號位一起參與運(yùn)算,這便于運(yùn)算器的設(shè)計與實(shí)現(xiàn)。
- IT入門基礎(chǔ)知識有哪些_IT基礎(chǔ)知識
- java基礎(chǔ)常識有哪些_Java核心基礎(chǔ)知識
- java入門基礎(chǔ)知識有哪些_java語法基礎(chǔ)知識
- c語言基礎(chǔ)常識有哪些_C語言基礎(chǔ)常識
- it運(yùn)維知識有哪些_IT英文縮寫
- c語言的冷知識有哪些_C語言的優(yōu)缺點(diǎn)
- 計算機(jī)基礎(chǔ)知識有哪些_計算機(jī)基礎(chǔ)操作入門
- java面試基礎(chǔ)知識有哪些_Java工程師需要具
- java編程的基礎(chǔ)理論知識有哪些_java程序員
- IT程序員必備的基礎(chǔ)知識有哪些_計算機(jī)硬件
- java程序設(shè)計基礎(chǔ)知識有哪些_Java編程語言
- it運(yùn)維基礎(chǔ)知識有哪些_it基礎(chǔ)知識