關于c語言的常用知識點有哪些 IT知識
電腦知識 由優(yōu)爾供稿C語言是僅產(chǎn)生少量的機器語言以及不需要任何運行環(huán)境支持便能運行的高效率程序設計語言。下面一起來看看9252兒童網(wǎng)小編為大家整理的c語言的常用知識點有哪些,歡迎閱讀,僅供參考。
C語言知識點大匯總
◆知識點1:交換兩個變量值的方法
1)采用第三方變量(最容易想到的方法)
2)采用加減法進行值得交換(面試時常用**)
代碼如下:
b = a - b;a = a - b;b = a + b;
3)采用按位異或的位方式
代碼如下:
a = a^b;b = a^b; a = a^b;
◆知識點2:取余運算%的結果與被除的符號相同,結果為兩個正數(shù)取余后前面加符號
◆知識點3:sizeof的使用
sizeof是一種運算符不要想當然理解為函數(shù)
sizeof使用時可以不加()
sizeof可以加變量、常量、數(shù)據(jù)類型
跟數(shù)據(jù)類型是必須加()
◆知識點4:#include編譯預處理命令與多文件團隊開發(fā)
include編譯預處理命令可以認為是:將后面的文件內容拷貝到當前的文件中
多文件團隊開發(fā):模塊分別編譯成.o都不能鏈接成功,合起來鏈接生成最終程序。
鏈接:把項目中所有相關聯(lián)的.o目標文件、C語言函數(shù)庫合并在一起,生成可執(zhí)行文件
——函數(shù)的定義放.c文件,函數(shù)的聲明放.h文件
——如果要使用某個.c文件中定義的函數(shù),只需要#include這個.c文件對應的.h文件
——h文件的作用:被別人拷貝。編譯鏈接的時候不需要管.h文件
◆知識點5:數(shù)組的幾種初始化方式如下:
int a[3] = {10, 9, 6};int a[3] = {10,9};int a[] = {11, 7, 6};int a[4] = {[1]=11,[0] = 7};(知道有此種初始化方式即可)
◆知識點6:數(shù)組的內存分析和注意點
存儲空間的劃分(內存的分配是從高地址到低地址進行的,但一個數(shù)組內部元素又是從低到高進行的)【注:對于以后學習重要】
數(shù)組名的作用,查看元素地址
注意數(shù)組不要越界
◆知識點7:字符串知識點
"123”其實是由’1’、’2’、’3’、’\0’組成
字符串的輸出”%s”,’\0’是不會輸出的
◆知識點8 : 字符串處理函數(shù):strlen()
計算的是字符數(shù),不是字數(shù)
計算的字符不包括’\0’,一個漢字相當于3個字符
例子:"哈haha" 字符數(shù)為7
從某個地址開始的數(shù)字符個數(shù),知道遇到’\0’為止
指針部分在C語言中占據(jù)重要地位,所以重點學習與整理了指針的知識:
◆知識點9:指針定義的格式
變量類型 *變量名
如:Int *p
◆知識點10:指針作用
能夠根據(jù)一個地址值,訪問對應的存儲空間
例:
Int *p;Int a = 90;P = &a;*p = 10;//把10賦值給p所指的存儲空間
◆知識點11:指針使用注意
Int *p只能指向int類型的數(shù)據(jù)
指針變量只能存儲地址
指針變量未經(jīng)初始化不要拿來間接訪問其他存儲空間
◆知識點12:指針與數(shù)組
遍歷數(shù)組
int ages[5] = {10, 4, 9, 44, 99};for(int i = 0; i<5; i++){ printf("%d\n", ages[i]);}
使用指針遍歷數(shù)組:
int *p;// 指針變量P指向了數(shù)組的首地址p = &ages[0];// 使用指針遍歷數(shù)組for(int i = 0; i<5; I++){ printf("ages[%d] = %d\n", i, *(p + i));}
注:指針+ 1取決于指針的類型
注:數(shù)組的訪問方式
數(shù)組名[下標]
指針變量名[下標]
*(p + i)
◆知識點12:指針與字符串
定義字符串的兩種方式:
1、利用數(shù)組
Char name[] = “Andyzhao”
特點:字符串里的字符可以修改
適用場合:字符串內容需要經(jīng)常修改
2、利用指針
Char *name = “itcast”
特點:字符串是一個常量,字符串里面的字符不能修改
使用場合:字符串的內容不需要修改,而這個字符串經(jīng)常使用
◆知識點13:預處理指令(三種):
宏定義
條件編譯
文件包含
1、宏定義的配對使用和帶參數(shù)的宏:
#define ... #undef
帶參數(shù)的宏:
#define sum(v1,v2) ((v1) + (v2))//括號是必須的
例如:
#define pingfang(a) a*a #define pingfang(a) (a*a)
調用時
pingfang(10)/pingfang(2)//不正確 pingfang(5+5)//不正確 帶參數(shù)的宏效率比函數(shù)高
2、條件編譯(一般是判斷宏的值)
#if 條件 ... #elif 條件 ... #else ... #endif(非常重要)不然后面的代碼全部無效
3、文件包含:
<>表示系統(tǒng)自帶的文件,""表示自定義文件
不允許循環(huán)包含,比如a.h包含b.h,b.h又包含a.h
◆知識點14:typedef 只是給類型起了個別名并不是定義新類型
struct Student{ int age; char *name; }; typedef struct Student Student; 等價于typedef struct Student{ int age; char *name; }Student; 也等價于typedef struct { int age; char *name; }Student;
類似的給枚舉類型起名
typedef enum Sex { Man,Women }Sex;
下面這種情況的寫法比較特殊
//下面是函數(shù)指針類型的自定義數(shù)據(jù)類型,返回值類型和參數(shù)類型要匹配
#include typedef int (*TypeFuncPointer)(int, int); int add(int a, intb) { return a + b; } int minus(int a, intb) { return a - b; } int main() { TypeFuncPointer p = add;//使用自定義類型Î TypeFuncPointer p2 = minus;//使用自定義類型Î printf("add = %d\n",p(1, 2)); printf("minus = %d\n",p2(1, 2)); return 0; }
下面是定義結構體的指針類型
typedef struct Student{ int age; char *name; }*PtrStu; //使用方式 Student stu ={18, "zhangsan"}; PtrStu p = &stu;
宏定義也是可以為類型起名的
#define Integer int 相當于typedef int Integer
注意和typedef的區(qū)別
例如:
typedef char * String #define String2char *
◆知識點15:static和 extern區(qū)別是能否進行跨文件訪問
①.函數(shù)
②.變量
1、對函數(shù)的作用:
外部函數(shù):定義的函數(shù)能被本文件和其他文件訪問
內部函數(shù):定義的函數(shù)只能被本文件訪問
默認情況下,所有函數(shù)都是外部函數(shù)(相當于帶關鍵字extern),所以可以省略
extern作用:
完整的定義和引用一個外部函數(shù)都加extern
引用時也是默認是外部函數(shù)所以也省略extern
static作用:定義一個內部函數(shù)
使用:static返回類型函數(shù)名(參數(shù)列表)
不能被其他文件調用
一個項目中,本文件的外部函數(shù)名不能和其他文件的外部函數(shù)同名(error)
本文件中的內部函數(shù)(static)可以和其他文件的函數(shù)名同名的
2、對變量的作用:
全局變量分為兩種:
外部變量:定義的變量可以被其他文件訪問
①.默認情況下所有的全局變量都是外部變量
②.不同文件中的同名外部變量都代表同一個
③.定義一個外部變量不加extern,聲明才加extern
同樣的聲明是沒有錯誤的
內部變量:定義的變量不能被其他文件訪問
學好C語言必須要掌握四個知識點
(一) 基本的數(shù)據(jù)操作,運算規(guī)則,常見程序結構設計
很多人覺得這么幾點我都看了多少遍了,早就爛熟于心了。舉個簡單的例子,printf打印可能是最常使用的函數(shù)了,但是這個函數(shù)在真正大型工程中,很少直接去調用,為什么?
主要項目中涉及到封裝的概念,什么時機加入打印在調試大型系統(tǒng)的時候,更容易定位問題,這些編程思維對于初學者來說很難接觸到,也很難想到,任何復雜的事物都是由簡單的細節(jié)環(huán)繞而成,在學習之初不要覺得這些很簡單的數(shù)據(jù)操作很簡單,要真正納入自己的知識體系還是需要花點心思??梢栽趯W習的時候,網(wǎng)上搜一些資料看這些數(shù)據(jù)操作以及運算規(guī)則是如何使用具體的場景中。
很多人初學者可能會有疑問覺得去哪里找這些代碼去,世界軟件發(fā)展了這么多年,最不缺的就是代碼,在github或者開源中國里面代碼多如牛毛。學習的對象也是數(shù)不勝數(shù)。有點扯遠了,這觸及到另外一個學習編程的步驟,學會看懂別人的代碼,然后才能嘗試寫出優(yōu)質的代碼,知己知彼百戰(zhàn)不殆。曾經(jīng)聽一個編碼高手說過“技術這東西只要花的時間長,肯下功夫早晚都能搞定,只要進入狀態(tài)了,什么方法都能想的出來”,看書學習也罷,看視頻學習也罷,需要讓自己插上聯(lián)想的翅膀,把自己的思維境界打開。
說到運算規(guī)則,涉及到代碼的格式的問題,說說身邊人的事情,去年招了一個剛畢業(yè)的學生,基本功不是很好,但是有一個特質專注力很高,能沉得住氣。當初見第一眼就覺得是個做軟件的苗子,有了第一印象后面的事情就順理成章了。很多經(jīng)驗不是很足的同學,參加面試回答的問題也不是很理想,但還是被錄取了,其中一個因素就是你身上有公司需要的基因,這多少算來有點運氣的成分在里面了。今年這哥們覺得很突然,說為啥當初剛開始寫代碼的時候為啥不要求那么嚴格,說了幾句話,初學者特別是基礎很差的情況下,要求太多只會讓一個人慢慢失去對這個行業(yè)的信心,也許會錯失一個軟件天才。隨著時間推移能夠邁入軌道了,那么就該要求一些基本的職業(yè)素養(yǎng)了,代碼的格式,就該要求了。很多初學者覺得寫的代碼越高深,越讓人看不懂才叫高手,有這種想法的趁早打住。大道至簡,這四個字在任何時候都不過時。做的復雜邏輯混亂只能說明當初在設計的時候,沒有徹底想明白,想明白了展示出來一般都比較舒坦平整。
(二) 指針,數(shù)組,結構體,枚舉靈活運用
不要只看這幾個字,幾乎是C語言里面最精髓的代表。數(shù)組這個概念基本上還能理解透徹,說到指針這個應用場景太多,而且在什么項目中幾乎都離不開指針的使用。變化無窮,會用的覺得其樂無窮,不懂的哭上天。記得在互聯(lián)網(wǎng)有個流傳很長時間的文章,林銳的我的大學十年(有興趣的同學可以去網(wǎng)上查閱,編程的人生也可以很彪悍,記得當初發(fā)燒期間還專門買了林銳的一本高質量編程)提到了做了一個C語言的項目,為了繞開指針最后全部用數(shù)組代替實現(xiàn)了,后來做的項目也黃了。不是說因為用數(shù)組使用就不行,項目的定位方向出問題了。用數(shù)組完全替代指針這條路也是可行的,但是會花費相當大的周折。
說到指針,不能不提到計算機專業(yè)開的另外一個課程,數(shù)據(jù)結構。數(shù)據(jù)結構就是原生數(shù)據(jù)或者組合數(shù)據(jù)的混合運用的一種規(guī)則集合。連接這些數(shù)據(jù),將這些數(shù)據(jù)有機的串聯(lián)在一起,指針起到非常關鍵的作用。經(jīng)常見到初學者說數(shù)據(jù)結構和天書差不多,幾乎看不懂,建議回爐好好學習指針,說到指針還是存在很多故事,在入門之初有幸遇到一位水平極高的老手帶著,基本功扎實的不得了,記得有一次使用指針忘記初始化,這老手嘆了口氣,當年我每次用指針錯一次,就被項目經(jīng)理當眾批評一次,后來再也不敢不初始化使用了,所以印象才能這么深刻,話說到這里剛入門的小白挨多少批評或者鄙視,是最正常不過的事情了,這對于編程界來說稀松平常。
結構體在項目中用的特別多,很多初學者覺得結構體都在教材的最后章節(jié),覺得不是那么重要。其實結構體在一定層次上決定著軟件的脈絡框架。很多高手在設計模塊的時候,不是急急忙忙的寫代碼,而是先把頭文件里面的結構體設計出來,簡單的來說就是把數(shù)據(jù)模型先搞起來。有個數(shù)據(jù)模型代碼實現(xiàn)起來就比較輕松了。面向對象里面類的老祖宗就是結構體延伸來的。關于結構體如何賦值,包含著指針的情況下,如何賦值這些都是常見的初學者經(jīng)常容易掉的坑。枚舉一般用在羅列不同類別,存在多個相同功能的實物,搭配switch使用的很多,在這就不一一列舉了。
(三)活用函數(shù)
函數(shù)是面向過程編程最基本的單位,任何C程序的運行都有函數(shù)的身影,因為程序的入口main就是一個函數(shù),函數(shù)傳值方式,調用方式(遞歸,回調)都是函數(shù)內在的表現(xiàn)。函數(shù)的里面又可以嵌套別的函數(shù),使得程序慢慢變得復雜化。前幾天和一個非計算機專業(yè)的聊天,談到如何學習函數(shù),說到了數(shù)學不好是不是編程不好學。函數(shù)的編程基本因子,和數(shù)學里面的函數(shù)有一定的共性,但編程里面的含義引申的層次更多,數(shù)學在一定層面就是提供一個工具或者方法而已,函數(shù)的設計里面夾雜著諸多的編程思想。
檢驗一個程序員水平的高低可以簡單讓用函數(shù)實現(xiàn)一個相對復雜一些的功能,基本上就能看出編程思想掌握的深淺程度。不妨自己實現(xiàn)一個函數(shù),檢驗下自己編程水準,函數(shù)的檢驗是面試里面必不可少的題目。
一個函數(shù)基本上代表一個小的模塊,多個模塊有機的組合形成一個系統(tǒng)。建議初學者在學習函數(shù)的時候,不要滿足于會使用函數(shù),還要讓自己站的層次更高一點。這能決定自己是一個純粹的執(zhí)行者還是未來框架的設計者,不要覺得這些東西距離自己很遠,慢慢的積累時間長了,慢慢也就從量變變成質變了。
(四)對于內存和性能有少許的理解
內存和性能對于初學者來說,可能覺得很遙遠,其實這兩樣東西貫穿整個編碼界,檢驗軟件功能最重要的兩項指標,軟件占用內存多少,運行時間長了會不會讓系統(tǒng)變緩慢。同時開啟在多個軟件的時候,你設計的軟件是不是變得很卡頓,這些都是大家平常在使用軟件時候經(jīng)常遇見的現(xiàn)象。今天在車上閑聊,司機說當年的XP運行的多好,非要升級搞什么windows7或者windows10之類的,把電腦搞的卡的要死。這其實是微軟操作系統(tǒng)設計理念的一個延伸,用空間換時間。說的通俗點,提前把一些常見的軟件加載到內存里面,使用的時候流暢度會感覺好一些,理念這么好,為啥還變得這么卡慢,主要機器配置太低了。微軟這幫大佬認為你機器內存和CPU還是相當不錯的,因為現(xiàn)在硬件成本基本上接近白菜價了。在機器配置還不錯的情況下,windows7,10運行的速度還是很不錯的。透過這些生活常識,歸結對編程,對編碼的認知程度上,慢慢就會建立起自己的知識體系。
這點在嵌入式設備上表現(xiàn)的很明顯,一般嵌入式設備內存和cpu配置不是高,內存就要省著點用,占用CPU很高的一些函數(shù)盡量少去調用,避開雷區(qū),這些經(jīng)驗就要靠平時多去積累,多去思考,才會融入自己知識體系,才會慢慢認識到寫代碼其實在編程時候,只占很小的一部分,大部分的時間還是在思考如何讓代碼更加利索,內存更少的去使用,cpu占用率低一些。認識到這些時候,層次就不一樣了,就會越來越覺得設計思想的重要性了。
C語言基礎知識點
【知識點1】C程序
C語言程序結構有三種: 順序結構 , 循環(huán)結構(三個循環(huán)結構), 選擇結構(if 和 switch)
【知識點2】main函數(shù)
每個C語言程序中main 函數(shù)是有且只有一個。讀程序都要從main()入口, 然后從最上面順序往下讀(碰到循環(huán)做循環(huán),碰到選擇做選擇)。
【知識點3】存儲形式
計算機的數(shù)據(jù)在電腦中是以二進制的形式保存。最低的存儲單元是bit(位),位是由為 0 或者1構成。 byte 是指字節(jié), 一個字節(jié) = 八個位。數(shù)據(jù)存放的位置就是它的地址。
【知識點4】注釋
是對程序的`說明,可出現(xiàn)在程序中任意合適的地方,注釋從“/*”開始到最近一個“*/”結束,其間任何內容都不會被計算機執(zhí)行,注釋不可以嵌套。
【知識點5】書寫格式
每條語句的后面必須有一個分號,分號是語句的一部分。一行內可寫多條語句,一個語句可寫在多行上。
【知識點6】標識符
合法的用戶標識符考查:
合法的要求是由字母,數(shù)字,下劃線組成。有其它元素就錯了。
并且第一個必須為字母或則是下劃線。第一個為數(shù)字就錯了。
C語言標識符分如下3類
(1)關鍵字。它們在程序中有固定的含義,不能另作他用。如int、for、switch等。
(2)預定義標識符。預先定義并具有特定含義的標識符。如define、include等。
(3)用戶標識符。用戶根據(jù)需要定義的標識符,符合命名規(guī)則且不與關鍵字相同。
關鍵字不可以作為用戶標識符號。main define scanf printf 都不是關鍵字。迷惑你的地方If 是可以做為用戶標識符。因為If 中的第一個字母大寫了,所以不是關鍵字。
【知識點7】實型數(shù)據(jù)
實型數(shù)據(jù)的合法形式:小數(shù)形式和指數(shù)形式。掌握判定指數(shù)形式合法性。
2.333e-1 就是合法的,且數(shù)據(jù)是2.333×10-1。
考試口訣:e 前e 后必有數(shù),e 后必為整數(shù)。
【知識點8】字符
字符數(shù)據(jù)的合法形式::
1 是字符占一個字節(jié),"1"是字符串占兩個字節(jié)(含有一個結束符號)。
0 的ASCII 數(shù)值表示為48,a 的ASCII 數(shù)值是97,A的ASCII 數(shù)值是65。
字符型和整數(shù)是近親:
char a = 65 ;
printf(“%c”, a); 得到的輸出結果:a
printf(“%d”, a); 得到的輸出結果:65
一般考試表示單個字符錯誤的形式:65 "1"
字符是可以進行算術運算的,記?。?0-0=48
大寫字母和小寫字母轉換的方法: A+32=a 相互之間一般是相差32。
【知識點9】整型數(shù)據(jù)
整型一般是兩個字節(jié), 字符型是一個字節(jié),雙精度一般是4 個字節(jié):
考試時候一般會說,在16 位編譯系統(tǒng),或者是32 位系統(tǒng)。碰到這種情況,不要去管,
一樣做題。掌握整型一般是兩個字節(jié), 字符型是一個字節(jié),雙精度一般是4 個字節(jié)就可以了。
【知識點10】轉義字符
轉義字符的考查:
在程序中 int a = 0x6d,是把一個十六進制的數(shù)給變量a 注意這里的0x 必須存在。
在程序中 int a = 06d, 是一個八進制的形式。
在轉義字符中, ’x6d’ 才是合法的,0 不能寫,并且x 是小寫。
‘141’ 是合法的, 0 是不能寫的。
‘108’是非法的,因為不可以出現(xiàn)8。
【知識點11】算術運算
算術運算符一共有+、—、*、/、%這五個。%符號兩邊要求是整數(shù)。不是整數(shù)就錯了。
三種取整丟小數(shù)的情況:不是四舍五入是舍掉小數(shù)部分。
1、int a =1.6;
2、(int)a;
3、1/2; 3/2;
【知識點12】強制類型轉換
將一個運算對象轉換成指定類型,格式為(類型名)表達式
一定是 (int)a 不是 int(a),注意類型上一定有括號的。
注意(int)(a+b) 和(int)a+b 的區(qū)別。前是把a+b 轉型,后是把a 轉型再加b。
【知識點13】賦值
是表達式就一定有數(shù)值。
賦值表達式:表達式數(shù)值是最左邊的數(shù)值,a=b=5;該表達式為5,常量不可以賦值。
復合賦值運算符:注意:a*=m+2 是 a=a*(m+2)
自加、自減表達式:假設a=5,++a(表達式的值為6), a++(表達式的值為5);
j=a++;等價于j=a;a=a+1; 而j=++a;等價于a=a+1;j=a;。
考試口訣:++在前先加后用,++在后先用后加。
【知識點14】逗號運算
逗號表達式:優(yōu)先級別最低; 表達式的數(shù)值逗號最右邊的那個表達式的數(shù)值。
(2,3,4)的表達式的數(shù)值就是4。
【知識點15】數(shù)制轉換
一定要記住二進制 如何轉換成十進制。
八進制是沒有8 的,逢8 進1,018 的數(shù)值是非法的。