標準c語言筆試題
- C語言
- 關注:2.17W次
引導語:在應聘與c語言相關崗位的工作時會要求進行筆試,以下是小編整理的標準c語言筆試題,歡迎參考閱讀!
1. 區域性變數能否和全域性變數重名? (華為)
解析:能,區域性會遮蔽全域性。要用全域性變數,需要使用"::"
區域性變數可以與全域性變數同名,在函式內引用這個變數時,會用到同名的區域性變數, 而不會用到全域性變數。對於有些編譯器而言,在同一個函式內可以定義多個同名的區域性變數. 比如在兩個迴圈體內都定義一個同名的區域性變數,而那個區域性變數的作用域就在那個迴圈體內。
3. 如何引用一個已經定義過的全域性變數? (華為)
解析:extern
可以用引用標頭檔案的方式,也可以用extern關鍵字,如果用引用標頭檔案方式來引用某個在標頭檔案中 宣告的全域性變理,假定你將那個編寫錯了,那麼在編譯期間會報錯,如果你用extern方式引用時, 假定你犯了同樣的錯誤,那麼在編譯期間不會報錯,而在連線期間報錯。
4. static全域性變數與普通的全域性變數有什麼區別?
解析:1) 全域性變數(外部變數)的說明之前再冠以static 就構成了靜態的全域性變數。 全域性變數本身就是靜態儲存方式, 靜態全域性變數當然也是靜態儲存方式 從以上分析可以看出,
static全域性變數與普通的全域性變數有什麼區別:
static全域性變數只初使化一次,防止在其他檔案單元中被引用; static區域性變數和普通區域性變數有什麼區別:
static區域性變數只被初始化一次,下一次依據上一次結果值; static函式與普通函式有什麼區別: static函式在記憶體中只有一份,普通函式在每個被呼叫中維持一份拷貝
5. 程序和執行緒的差別(微軟亞洲)
解析:答:執行緒是指程序內的一個執行單元,也是程序內的可排程實體. 與程序的區別:
(1)排程:執行緒作為排程和分配的基本單位,程序作為擁有資源的基本單位
(2)併發性:不僅程序之間可以併發執行,同一個程序的多個執行緒之間也可併發執行
(3)擁有資源:程序是擁有資源的獨立單位,執行緒不擁有系統資源,但可以訪問隸屬於程序的資源.
(4)系統開銷:在建立或撤消程序時,由於系統都要為之分配和回收資源,導致系統的開銷明顯大於建立或撤消執行緒時的開銷
6. 用巨集定義寫出swap(x,y)(思科)
解析:#define swap(x, y) x = x + y; y = x - y; x = x - y
7. 什麼是預編譯,何時需要預編譯:(思科)
解析:就是指程式執行前的一些預處理工作,主要指#表示的. 何時需要預編譯? 1)、總是使用不經常改動的大型程式碼體。
2)、程式由多個模組組成,所有模組都使用一組標準的包含檔案和相同的編譯選項。 在這種情況下,可以將所有包含檔案預編譯為一個預編譯頭。
8. 下述三個有什麼區別?char * const p;char const * p,const char *p; (慧通)
解:const char* p和char const *p修飾的是p所指向的變數,
不可以用*p=’a’等這樣的方式修改變數區的內容. 指標本身是可以修改的,比如說
char x,y; const *p = &x, p = &y,修改指標本身是可以的,*p = ‘b’就不行。
Char *const p;中const修飾的是指標,表明指標在操作過程中不可以修改,
而指標所指向的內容是可以修改的,比如說char x ,y; char* const p = &x; *p = ‘b’是可以的, 但p=&y;是不可以的,const修飾的是指標,不可以修改指標的指向,
只可以修改指標所捆綁的變數
9. int (*s[10])(int) 表示的是什麼啊 ? (慧通)
解析:這樣的表示式可以遵循這樣的規則:從右向左,由近及遠,括號優先;
比如:從a符號開始。其右邊是[10],說明a是個陣列,其中存了十個元素。 再看a的左邊是一個*。說明陣列中存的是指標。 現在在看(*a[10])的右邊是(int);說明所存的指標是指向有一個int形參的函式 現在看(*a[10])的左邊是個int ,說明指向的函式的返回值為int 型別;
10. 程序之間通訊的途徑,程序間通訊方法(慧通)
解析:無名管道,命名管道,訊息佇列,訊號,共享記憶體,套接字。等
11. 什麼是“引用”?申明和使用“引用”要注意哪些問題?
解析:引用就是某個目標變數的“別名”(alias),對應用的操作與對變數直接操作效果完全相同。申明一個引用的時候,切記要對其進行初始化。引用宣告完畢後,相當於目標變數名有兩個名稱,即該目標原名稱和引用名,不能再把該引用名作為其他變數名的別名。宣告一個引用,不是新定義了一個變數,它只表示該引用名是目標變數名的一個別名,它本身不是一種資料型別,因此引用本身不佔儲存單元,系統也不給引用分配儲存單元。不能建立陣列的引用
ude和include “filename.h”的區別?
解析:<>是從標準庫路徑搜尋,
“”是從使用者當前工作目錄開始,找不到,在到標準庫開始
和Stack的區別?
解析:Heap是堆,Stack是棧。
棧的空間由作業系統自動分配和回收,而堆上的空間由程式設計師申請和釋放。
棧的空間大小較小,而堆的空間較大。
棧的地址空間往低地址方向生長,而堆向高地址方向生長。
棧的存取效率更高。
程式在編譯期間對變數和函式的記憶體分配都在棧上,
且程式執行過程中對函式呼叫中引數的記憶體分配也是在棧上。
of和strlen之間的區別?
解析:(1)sizeof操作符的結果型別是size_t,它在標頭檔案中的typedef為
unsigned int型別,該型別保證能容納實現所建立的最大物件的位元組大小。
(2)sizeof是運算子,strlen是函式
(3)sizeof可以用型別做引數,strlen只能用char *做引數,
且必須是以’