C語言筆試題紀錄(一)

2021-08-15 05:48:27 字數 2609 閱讀 2649

下列不是linux系統程序型別的是(d)

a.互動程序b.批處理程序c.守護程序d.就緒程序(程序狀態)

聯合體union的記憶體大小判斷:為其包含的成員的記憶體大小的最小公倍數

命令kill 9 的含義是(d)

a. kills the process whose pid is 9

b. kills all processes belonging to uid 9

c. sends sigkill to the process whose pid is 9

d. sends sigterm to the process whose pid is 9

系統呼叫與庫函式的區別?

庫函式是語言本身的一部分,而系統函式是核心提供給應用程式的介面,屬於系統的一部分。

函式庫呼叫是語言或應用程式的一部分,而系統呼叫是作業系統的一部分。

使用者應用程式訪問並使用核心所提供的各種服務的途徑即是系統呼叫。在核心和使用者應用程式相交界的地方,核心提供了一組系統呼叫介面,通過這組介面,應用程式可以訪問系統硬體和各種作業系統資源。 

1.系統呼叫是為了方便應用使用作業系統的介面,而庫函式是為了方便人們編寫應用程式而引出的,比如你自己編寫乙個函式其實也可以說就是乙個庫函式。

2.系統呼叫可以理解為核心提供給我們在使用者態用的介面函式,可以認為是某種核心的庫函式。

3.read就是系統呼叫,而fread就是c標準庫函式.

sizeof與strlen的區別?

1、本質不同

sizeof是運算子。

strlen是函式。

2、處理的階段不同

sizeof在編譯時就已經完成了計算。

stelen是在執行時進行計算。

3、計算的內容不同

sizeof可以計算乙個字串的長度也可以計算乙個資料變數所佔記憶體的大小。

strlen只能計算字串的長度。

4、對\0的處理方式不同

sizeof會把\0也計算在內。

strlen遇到\0停止,但是不會把\0計算在內。

5、對於指標的處理不同

sizeof是求這個指標的的大小

strlen是求這個指標所指向的內容的大小

6、對括號的要求不同

sizeof求資料型別所佔記憶體大小時可以不加括號;求變數的長度時必須加括號

strlen必須加括號

c語言分配記憶體方式有哪些?c語言中常見的記憶體錯誤有哪些?什麼是記憶體洩漏?什麼是記憶體空間?

記憶體洩漏:堆記憶體申請後未釋放記憶體,導致記憶體被占用

記憶體空間:

bss段:通常是指用來存放程式中未初始化的全域性變數的一塊記憶體區域。bss是英文block started by symbol的簡稱。bss段屬於靜態記憶體分配。

資料段:資料段通常是指用來存放程式中已初始化的全域性變數的一塊記憶體區域。資料段屬於靜態記憶體分配。

**段: **段通常是指用來存放程式執行**的一塊記憶體區域。這部分區域的**屬於唯讀。在**段中,字串常量也屬於這部分。

堆(heap):堆是用於存放程序執行中被程式設計師申請動態分配的記憶體段,它的大小並不固定,可動態擴張或縮減。

棧(stack):棧又稱堆疊,存放程式的區域性變數除此以外,在函式被呼叫時,棧用來傳遞引數和返回值等。由於棧的先進先出特點,所以棧特別方便用來儲存/恢復呼叫現場。

什麼是野指標?如何避免野指標?

野指標:指向不確定位址的指標變數。(即沒有初始化) (隨機指向一塊記憶體的指標)

使用野指標易因記憶體洩露出現段錯誤。因為它隨機指向的位址可能被分配了記憶體,不一定每次都產生段錯誤.

而造成記憶體洩露的原因有兩個:

1.訪問了沒有許可權的記憶體(平時我們正確使用指標的時候,系統應經將相應的記憶體分配給使用者,但是如果指向沒有分配的記憶體,系統會判定我們沒有許可權)

2.訪問了已經釋放了的記憶體。

如何解決野指標,養成一下編碼習慣:

1,當乙個指標沒有指向時,置為null(空),

2,當往乙個指標賦值的時候,一定要給指標分配空間,

3,當給乙個指標分配空間,一定壓迫檢查是否分配成功。

4,分配空間成功之後,要先初始化,

5,釋放 free(p);

6,再次置空:p = null;

因為野指標主要是因為我們平時程式設計習慣造成的,因此我們只能避免野指標的出現,而不能杜絕。(請注意用詞)我們在程式設計時,做到以下幾點可以有效地避免野指標的出現。

第一,當乙個指標沒有指向時,我們一般預設指向null。(null代表記憶體的0位址,並且null是不允許做任何操作的)

第二,使用malloc分配記憶體。(在堆空間裡分配記憶體)

分別寫出bool,int,float,指標型別的變數a與「零」的比較語句

int:(int==0)或(int!=0)

float:const float epsinon = 0.00001;if((n>=-epsinon)&&(n<=epsinon))

bool:if(flag) 或(if!flag)

指標型別:if(n == null)或者(n != null)

C語言筆試題

有a b c d四個人,要在夜裡過一座橋。他們通過這座橋分別需要耗時1 2 5 10分鐘,只有一支手電,並且同時最多只能兩個 人一起過橋。請問,如何安排,能夠在17分鐘內這四個人都過橋?答案 a b 2 mins 1 mins a c d 10 mins 2 mins b a b 2 mins 一共...

C語言筆試題

1 用標準c程式設計 找出整形數字1 100之間的素數,並列印出來。素數 除了1和自己本身可以被整除。include stdio.h main inti,j,n 0 printf 1 100之間的素數 n for i 2 i 100 i for j 2 jif i j 0 break if i j ...

c語言 筆試題6 25

unsigned short a 10 printf a u n a char c 128 printf c d n c 解析 a 0xfffffff5,int值 為 11,但輸出的是uint。所以輸出4294967285 第二題,c 0x10,輸出的是int,最高位為1,是負數,所以它的值就是0x...