C 面試筆試題目(選1)

2021-07-06 11:31:52 字數 2535 閱讀 7000

標籤(空格分隔): 未分類

看網上文章的同時,把裡面提到的一些基礎問題重新按照自己的話來寫一遍,加深印象。

c++中,記憶體分為5個區,分別為:堆、棧、自由儲存區、全域性/靜態儲存區、常量儲存區。

在32位編譯器下:

short int 2位元組

int 4位元組

unsigned int 4位元組

char 1位元組

char * 4位元組(即指標變數): 4個位元組(32位的定址空間是2^32,即32個bit,也就是4個位元組。同理64位編譯器)

float 4位元組

double 8位元組

long 4位元組

long long 8位元組

int i =0, j;

j = ++i; //前自增 j = 1, i = 1

j = i++; //後自增 j = 1, i = 2

預處理是指在進行編譯的第一遍掃瞄之前做的工作,預處理有預處理程式負責完成

巨集定義是c語言開始提供的3種預處理功能之一,這3種預處理分別是:巨集定義、檔案包含、條件編譯

巨集定義與操作符的區別:巨集定義是替換,不計算,也不做表示式求解,另外巨集定義替換在編譯前進行,不占用記憶體,巨集的展開不占用執行時間,只佔編譯時間,而操作符占用執行時間。

#define conn(x,y) x##y

#define tochar(x) #@x

#define tostring(x) #x

x##y 表示x連線y

int n = conn(123,456); /* 結果就是n=123456;*/

char* str = conn("asdf", "adf"); /*結果就是 str = "asdfadf";*/

#@x表示給x加上單引號,返回乙個const char。

char a = tochar(1);//結果就是a='1';

做個越界試驗char a = tochar(123);結果就錯了;

但是如果你的引數超過四個字元,編譯器就給給你報錯了!

error c2015: too many characters in constant :p

#x表示給x加雙引號

char* str = tostring(123132);//就成了str="123132";

參考文章 c++巨集定義詳解

虛函式的主要作用是建立抽象模型,從而達到方便擴充套件系統的目的,純虛函式是指被表明為不具體實現的虛函式,是一種特殊的虛函式

很多情況下,基類中不對虛函式給出有意義的實現,而是把它宣告為純虛函式,它的實現留給該基類的派生類來做,這就是純虛函式的作用

int*(*fn)(int*)=0;上述**什麼意思?

代表是返回型別是int*的,輸入引數是int*的純虛函式指標。

int*: 返回值型別

(*fn): 指標函式

(int*): 引數型別

=0: 純虛函式

const double *cptr;//cptr指標可能指向乙個型別為double的常量值

例子:int (*f)(int x);

由於()運算子的優先順序高於*,所以指標變數名外的括號必不可少。

int func(int x);//宣告乙個函式

int (*f) (int x);//宣告乙個函式指標

f = func;//將func()函式的首位址複製給指標f

注意賦值的時候func不帶括號,也不帶引數,由於func代表函式的首位址,因此複製以後,指標f就指向函式func(x)的**的首位址。

抽象類可以提供多個派生類共享基類的公共定義,他可以提供抽象方法,也可以提供非抽象方法。抽象類不鞥呢被例項化,必須通過繼承由派生類實現其抽象方法,也就是說,對抽象類不能使用new 關鍵字,也不能被封裝。 如果抽象類的派生類沒有實現所有的抽象方法,則該派生類也必須宣告為抽象類。派生類使用覆蓋來實現抽象方法。

抽象類一定包含有純虛函式,因此不能定義抽象類物件。

另外,純虛析構函式在宣告之後一定要定義,派生類的析構函式會自動呼叫其基類的析構函式。這個過程是遞迴的,最終,抽象類的純虛析構函式也會被呼叫。

如果純虛析構函式只被宣告而沒有定義,那麼就會造成執行時(runtime)崩潰。(在很多情況下,這個錯誤會出現在編譯期,但誰也不擔保一定會是這樣。)純虛析構函式的啞元實現(dummy implementation,即空實現)能夠保證這樣的**的安全性。

參考: c++虛析構函式、純虛析構函式

其實還有些基礎的東西需要了解,那就是虛函式表

虛函式表(virtual function)是通過一張虛函式表來實現的。簡稱為v-table。在這個表中,主要是乙個類的虛函式的位址表,這張表解決了繼承、覆蓋的問題,保證其真實反應實際的函式。

更多請參考:c++ 虛函式表解析

C 面試 筆試題目

1 c 中 struct和class的區別是什麼 struct的成員的預設屬性是公開的,class的成員的預設屬性是私有的 2 c 程式中呼叫被c編譯器編譯後的函式,為什麼包含extern c extern是c c 中的關鍵字其宣告的函式和變數可以在本模組或者其他模組中使用 其次c 作為一種物件導向...

面試筆試題目總結

總結一下以前面試和筆試時的題目,找工作要用的,說不定哪天就又遇上了。1.鍊錶與陣列的區別 這個題目遇到了兩次 答 1 陣列要事前定義固定的長度,不能動態的刪減 2 鍊錶能動態的進行儲存分配,可以適應資料動態的增減情況,可以方便的插入刪除資料項 3 陣列從棧中分配空間,自由度小 4 鍊錶從堆中分配空間...

C 面試筆試題

看一下這是一些c 面試的筆試,對於學習c 的你也許也是個考驗吧,有時間做做吧 給定九個數,例如 1,3,3,5,6,7,8,8,9計算出這九個數的排列的種數。需要考慮重複情況,如果給定9個1,則只有一種結果。限制 不能使用stl庫 要求 完成函式 unsigned int foo unsigned ...