C語言面試基礎

2021-05-11 21:37:21 字數 4839 閱讀 6213

下面是我最近看c語言的讀書筆記,裡面有很多以前弄不明白的知識點,現在終於豁然開朗啦,希望對大家有所幫助,其中有很多知識點是面試時經常問到而大家又常常答不上來的!

1、c語言的基本資料型別

在c語言中,資料型別可分為基本資料型別、構造資料型別(包括陣列、列舉、結構體和聯合體)、指標型別、空型別四大類。c語言的基本資料型別包括整型、浮點型和字元型。

2、常用轉義字元表

3、字元常量是用單引號括起來的乙個字元;字串常量是由一對雙引號括起來的字串行。字串常量在記憶體中儲存時,每個字元占用乙個位元組的記憶體空間,系統自動在字串尾部加上乙個字元『\0』,以標識這個字串的結束。

4、printf使用的格式字元如下:

(1) d:以十進位制輸出整型值;

(2) o:以八進位制輸出整型值;

(3) x:以十六進製制輸出整型值;

(4) u:以無符號形式輸出整型值;

(5) c:輸出乙個字元;

(6) s:輸出乙個字串;

(7) f:輸出乙個浮點數;

(8) e:以科學表示法輸出浮點數;

(9) g:輸出%f與%e中占用位數較短的乙個。

對於長整型,除了可以使用%d方式輸出,還可以以%ld的形式輸出。注意:單精度浮點型(float)和雙精度浮點型(double)都以%f的格式輸出。

在%與格式字元之間還可以加上一些說明符以對輸出格式做進一步的限定:

(1) -:輸出時左對齊,預設是右對齊;

(2) dd:指定輸出的引數所佔的最小寬度,如果資料的長度小於最小寬度則以空格來填補,如果資料的長度大於等於最小寬度則以原樣輸出;

(3) dd.dd:用於輸出浮點數時,前面的dd表示整個浮點數所佔的寬度,後面的dd表示小數點後面將輸出幾位;輸出字串時,前面的dd表示整個字串所佔的寬度,後面的dd表示輸出字串的前dd個字元。

5、scanf的格式字元如下:

(1) d:期待輸入乙個十進位制整型;

(2) o:期待輸入乙個八進位制整型;

(3) x:期待輸入乙個十六進製制整型;

(4) u:期待輸入乙個無符號整型;

(5) c:期待輸入乙個字元;

(6) s:期待輸入乙個字串;

(7) f:期待輸入乙個浮點數;

(8) e:期待輸入乙個以科學表示法的浮點數。

5、命名規範

(1) 識別符號:在程式設計中,變數名、函式名、陣列名等統稱為識別符號。c語言規定,識別符號只能由字母(a~z,a~z)、數字(0~9)、下劃線(_)組成,並且識別符號的第乙個字元必須是字母或下劃線,不能以數字開頭。

注意:c語言是區分大小寫的。

(2) 關鍵字:關鍵字是由c語言規定的具有特定意義的字串,通常也稱為保留字。使用者定義的識別符號不應與關鍵字相同。

c語言的關鍵字分為以下幾類:型別說明符、語句定義符和預處理命令字。型別說明符是指用於定義、說明變數、函式或其他資料結構的型別,如int,double等;語句定義符用於表示乙個語句的功能,如if,for等;預處理命令字用於表示乙個預處理命令,如include,define等。

(3) 命名規範:linux下建議的命名規則如下:變數名必須有一定的意義,並且意義明確;不建議大小寫混用;在失去意義的情況下,盡量使用較短的變數名;函式名應以動詞開頭;盡量避免使用全域性變數。

6、c程式語句概述

c語言既有完成單一任務的簡單語句,也有由多條語句構成完成某一功能的復合語句。c語言以分號作為乙個語句的結束。c程式的語句必為以下5種語句之一:

(1) 空語句:空語句只有乙個分號,它什麼也不做。(2) 表示式語句:

乙個表示式加上乙個分號就構成了乙個語句。(3) 復合語句:復合語句又稱塊,是用一對大括號括起來的語句集合。

塊同時也標識了乙個域,在乙個塊中定義的變數只能在該塊的內部使用。(4) 函式呼叫語句:乙個函式呼叫和乙個分號就構成了乙個函式呼叫語句。

(5) 控制語句:控制語句用於控制程式的流程,c程式中有9種控制語句,如下所示:

if…else…:條件語句

switch:多分支選擇語句;

for():迴圈語句;

while():迴圈語句;

do…while():迴圈語句;

continue:結束本次迴圈語句;

break:結束整個迴圈語句或結束switch語句;

return:函式呼叫返回語句;

goto:轉向語句(一般不使用,只在特殊情況下使用)。

7、c程式的3種基本控制結構:順序結構、選擇結構(或分支結構)和迴圈結構。

8、case後面有多條語句時,不用加大括號以構成乙個語句塊,系統自動把它們當做乙個語句塊來執行。這是乙個非常特殊的情況。當然加上大括號也可以。

9、break只能用在switch語句和3中迴圈語句中。

10、c程式中包含標頭檔案有兩種方法:

(1) #include

(2) #include」myinc.h」

第一種使用尖括號(<>),第二種使用雙括號(「」)。對於第一種,編譯器gcc在系統預設包含檔案目錄(如/usr/include)中查詢相應的標頭檔案myinc.h。

對於第二種,編譯器gcc首先在當前目錄中查詢標頭檔案,如果當前目錄沒有找到需要的標頭檔案,就到指定的dirname目錄中去尋找。

對於系統提供的標頭檔案,通常以第一種方式包含到源程式中;對於自己編寫的標頭檔案,通常放在與源程式相同的目錄中,並以第二種方法包含該原始檔。

11、如果在定義乙個函式時,沒有明確指明返回型別,linux上最常用的編譯器gcc預設返回型別為int。

12、形參與實參的型別應該相同或者兩者間可以互換。

13、函式通過return語句將乙個值返回給呼叫它的函式。乙個函式體內可以有多條return語句,當實際執行到第一條return語句時,函式就執行完畢。

14、如果函式的返回型別與return語句返回的值型別不同,以函式的返回型別為準。對於數值型別將自動進行型別轉換。

15、如果呼叫的函式是使用者自定義的函式,而且該函式與呼叫它的函式在同乙個檔案中。若呼叫語句在函式定義之前,則應該對函式先進行宣告;若呼叫語句在函式定義之後,則不必對函式進行宣告。

16、函式可以巢狀呼叫但不可以巢狀定義。

17、變數的訪問控制:變數按其在程式中被訪問範圍可分為兩類:區域性變數和全域性變數。區域性變數是指在乙個函式內部定義的變數。

18、變數的儲存類別:變數根據儲存類別可以分為靜態儲存變數和動態儲存變數,簡稱為靜態變數和動態變數。所謂靜態變數是指在程式執行期間分配固定的儲存空間的變數,所謂動態變數是指在程式執行過程中根據需要動態分配記憶體空間的變數。

動態變數主要有:函式的形參、函式內定義的非static變數。靜態變數有:

函式內定義的static變數、全域性變數。動態變數函式呼叫後會立即銷毀,而靜態變數在函式呼叫結束後不會銷毀,只有當整個程式執行結束後才會被銷毀。

19、在所有函式外定義的陣列的所有元素將自動賦予初值0,在函式內部定義的陣列,系統不會為其進行初始化,在使用陣列元素前必須對元素進行初始化。

20、對於二維陣列,如果對全部元素都賦初值,則定義陣列時第一維的維數可以省略,但第二維的維數必須指定。

21、c語言中的指標是指專門用來存放記憶體位址的變數。每個指標都有乙個與之關聯的資料型別,該型別決定了指標所指向的變數的資料型別。

22、避免使用未初始化的指標。在定義指標時最好將其初始化為null,即明確指示當前指標不指示任何變數。

23、對於指標,有兩個與其相關的運算子如下:

&:取位址運算子;

*:取指標所指向的記憶體單元的值。

24、在指向陣列某個元素的指標上加上或減去乙個整型數值,就可以指向另乙個陣列元素,前提是沒有超出陣列的範圍。

25、注意區別:

*p++:先取得當前p所指向的變數值再使p指向後乙個變數;

*p--:先取得當前p所指向的變數再使p指向前乙個變數;

*++p:先使p指向後乙個變數再取得p所指向的變數的值;

*--p:先使p指向前乙個變數再取得p所指向的值。

26、陣列元素也可以是指標型別,這種陣列稱為指標陣列,也就是說指標陣列的每乙個元素都是乙個指標變數;陣列指標是指陣列名實際上就是指向陣列第乙個元素的指標。

27、指標陣列定義的一般形式:

型別名 *陣列名[陣列長度];

例如:int *p[5]

由於運算子*的優先順序低於運算子,因此p先與結合,形成p[5]的形式,它顯然是乙個陣列。然後再與*結合,表示陣列元素的型別為指標,每個陣列元素都指向乙個整型變數。這裡p就是乙個二級指標,它是指標的指標。

28、區別int (*p)[5]和int *p[5]:前者是乙個指標,它指向乙個含有5個元素的指標。後者是乙個陣列,它的長度為5,陣列中的每乙個元素指向乙個整型變數。

29、如果乙個函式的引數中有指標,那麼出於程式健壯性的考慮,在函式中必須檢查引數是否為null。

30、注意區別:

(*p)++:取得指標p所指向的變數並將其加1;

*p++:先取得當前p所指向的變數值再使p指向後乙個變數。

31、陣列,如char a[20],a是指向陣列第乙個元素的指標,它的值不可以被改變,它在程式執行過程中始終指向陣列的第乙個元素。而在函式定義中,如void copy_string(char src,char dst),src、dst也是乙個指標,但它們的值是可以改變的,也就是說,它們可以指向其他字元變數。

32、不能將乙個字串常量或字元陣列直接賦給另乙個字元陣列。字串的陣列只能使用strcpy、strncpy或其他類似功能的函式。strcpy是不安全的,存在安全漏洞,容易被黑客所利用,因此一般應該使用strncpy。

33、靜態變數分為兩種:全域性靜態變數和區域性靜態變數。全域性靜態變數是在所有函式之外定義的靜態變數,區域性靜態變數是在某個函式內定義的變數。

靜態變數儲存在記憶體的靜態儲存區,靜態儲存區在程式的整個執行期間都存在。未經初始化的靜態變數會被程式自動初始化為0。全域性靜態變數的作用域是從定義之處開始到檔案結尾,區域性靜態變數只在定義它的函式內有效。

靜態變數的用途有:(1) 限制變數的作用域;(2) 設定變數的儲存域。

c語言基礎

c net是微軟公司推出的一種型別安全 現代 簡單 由c和c 衍生出來的物件導向的程式語言。掌握c net的特點 程式結構 整合開發環境 c 語言的基本知識等,是利用好c 的前提。本章內容 c 概述 c 語言基礎 控制結構 陣列 異常處理 c 是微軟公司在2000年7月發布的一種全新的簡單 安全 物...

c語言面試

華為1 區域性變數能否和全域性變數重名?答 能,區域性會遮蔽全域性。要用全域性變數,需要使用 區域性變數可以與全域性變數同名,在函式內引用這個變數時,會用到同名的區域性變數,而不會用到全域性變數。對於有些編譯器而言,在同乙個函式內可以定義多個同名的區域性變數,比如在兩個迴圈體內都定義乙個同名的區域性...

c語言面試大全

1.求下面函式的返回值 微軟 int func x return countx 假定x 9999。答案 8 思路 將x轉化為2進製,看含有的1的個數。2.什麼是 引用 申明和使用 引用 要注意哪些問題?答 引用就是某個目標變數的 別名 alias 對應用的操作與對變數直接操作效果完全相同。申明乙個引...