C,C 面試指南筆記

2021-05-09 01:16:58 字數 4112 閱讀 6792

1、c語言語句是指以分號作為結束符,編譯後產生機器指令的**。預處理指令不是c語句。

2、變數的宣告和定義有什麼區別?

定義:為變數分配位址和儲存空間。宣告:不分配位址。

乙個變數可以在多個地方宣告,只能在乙個地方定義。加入extern修飾的是變數的宣告,說明此變數將在檔案以外或在檔案後面部分定義。說明:

很多時候乙個變數,只是宣告,不分配記憶體空間,直到個體使用時才初始化分配記憶體空間,如外部變數。

3、以最簡單的方式使電腦發出蜂鳴聲音?

使電腦發出蜂鳴有很多方法:可以呼叫beep;可以用彙編直接操作蜂鳴器對應的管腳。

最簡單的方式:

#include"stdio.h"

int main(int argc,char *argv)

4、程式設計規範包括程式的可行性,可讀性,可移植性及可測試性。

可行性:是目的,也是規範的靈魂。通常要注意:預處理命令的使用;運算子優先順序的區別;指標的使用等。

可讀性:變數和函式名的命名做到見名知義;適當加注釋(寫在**的上方或右方);無引數函式時最好加void等。

可移植性:使用標準庫函式,並且把它們和ansi/iso c標準中定義的標頭檔案放在一起使用。等等。

可測試性:增加列印訊息,跟蹤程式流程,這樣可使測試者更加快捷地找到問題所在;巢狀最好不多於五層。等。

5、變數與函式名命名的習慣

● 滿足命名規則,不能用關鍵字。(以下總結為可讀性)

● 識別符號最好採用英文單詞或其組合,切忌中英混用且不要過長。

● windows系統中識別符號通常大小寫混排如littleboy。

● 指標變數命名基本原則:一重指標為"p"+變數型別字首+名稱,如float型別指標pfstat.多重指標類似。

● 程式中最好不要出現區域性變數與全域性變數完全相同的情況。

● 符號常量常用下劃線分隔單詞。

● 全域性變數加字首g_。

● 類的資料成員加字首m_(表示member),避免資料成員與成員函式引數同名時混。

6、寫出bool,int,float.指標變數(用flag表示的)與「零值」比較的if語句。

● bool :

if(flag)

else

或:if(!flag)

else

不良習慣:

if( flag==true);if(flag==false);if(flag==1);if(flag==0)

● int :

if( 0!=flag)

else

或:if( 0==flag)

else

不良習慣:

if(flag==false);if(flag).

● 指標型別:

if(null==flag)

else

或:if(null!=flag)

else

不良習慣:

if(p==0);if(p!=0);if(p).

● float:

const float norm=0.0001;

if((flag>=norm)&&(flag<=norm))

不良習慣:

if(x==0.0);if(x!0.0).

應當特別注意:在int,指標變數和零值比較時,把零值寫在左邊。是因為當把"=="寫成「=」時,編譯器可以報錯,否則這種邏輯錯誤不容易被發現。

7、**

一、short s1=1;s1=s1+1l;

**二、short s1=1;s1+=1l;

以上兩段**是否都正確?

型別轉換關係:

例如:short和int型資料相加,則將short 轉換成int.

**一中s1是short,轉換成long與1l相加,得到的是long和,但賦值給short型的s1,所以不正確。改為:

short s1=1;s1=(short)(s1+1l);

**二中「+=」會進行型別轉換,所以正確。

8、c中任何資料在記憶體中都是以二進位制形式存放的。而數值是以補碼表示的。字元型資料在記憶體中是按其ascii碼值來儲存的,其ascii碼值在記憶體中也是以二進位制形式儲存的。

9、什麼是左值,什麼是右值?

左值位於賦值號左邊,右值位於賦值號右邊。

常量不可定址,變數可以,變數有兩個相關值:位址值和資料值。

資料值:儲存在記憶體中的資料,也稱為變數的右值。

位址值:儲存資料值的位址,也稱為變數的左值。

左值一般是變數,右值可以是變數,表示式或常量。即左值可以為右值,右值不可以為左值。

10、字元型資料無論在16位機上還是32位機上都是佔乙個位元組,而基本整型在16位機上佔兩個位元組,在32位機上佔四個位元組。因此,用sizeof求位元組數時要注意分情況。

11、sizeof與strlen的區別

● sizeof是乙個操作符,而strlen是庫函式。

● sizeof用來返回乙個資料型別的佔的位元組數,引數可以是資料型別也可以是變數且後面的小括號可以不寫。strlen用來返回乙個字串的長度且只能以'\0'作為結束符的字串為引數。

● 編譯器在編譯時就計算出sizeof的值,而strlen函式是在執行時才計算出來。

● 陣列做sizeof引數不退化,做strlen引數時退化為指標。

例如:#include"stdio.h"

#include"string.h"

void main(void)

結果為:4,10

12、//位域

#include"stdio.h"

struct s1

;struct s2

;struct s3

;//怎麼區分是結構體還是位域??

void main(void)

注:在vc中都是24。怎麼回事?

書上是:16,24,32

說每個資料都要對照結構體內最大資料位元組數的最小公倍數補齊。

位域:是把乙個位元組中的位按照實際的需求分成不同的區域,表明每個區域位數,區域的網域名稱,並允許程式按照網域名稱進行操作。如此就可以把不同的物件用乙個位元組來表示。

能節省空間。即成員均按二進位制位分配。

位域定義格式:struct 位域的結構名

位域列表};

位域列表表示形式:

型別說明符位網域名稱:位域的長度

如上s1,s2,s3。

幾點說明:

● 乙個位域必須儲存在同乙個位元組中,不能跨兩個位元組。如乙個位元組所剩空間不夠存放另乙個位域時,應從下一單元起存放該位域。也可以有意使某位域從下一單元開始。如:

struct wy

;在這個位域定義中,a佔第乙個位元組的6位,後2位填0表示不使用,b從第二位元組開始,占用4位,c占用4位。

● 由於位域不能跨兩個位元組,因此位域的長度不能大於乙個位元組的長度,也就是不能超過8位二進位制位。

● 位域可以無位網域名稱,這時它只用來填充或調整位置。無名的位域是不能使用的。

例如:struct ky

;13、c和c++中的static有什麼區別?

c中:static用來修飾變數或函式,主要用來說明這個變數或函式只能在本檔案**塊中訪問,且static修飾的變數存放在段儲存區。

主要有以下用途:

● 定義區域性靜態變數

儲存在靜態儲存區,在程式執行期間不會釋放,只在宣告時初始化一次,若沒有初始化,自動賦值為0或空字元。具有區域性變數的「記憶性」及生存週期「全域性性」特點。「記憶性」是指在兩次函式呼叫時,第二次呼叫開始時,變數能夠保持上一次呼叫結束時的值。

「全域性性」可改善函式返回指標的問題,區域性變數的問題在於當函式退出時其生存期結束。而利用static修飾的區域性變數卻可以延長其生存期。

● 限定訪問區域

被static修飾的變數及函式只能被同一檔案內的**段訪問。

c++中,除上述兩種還有:

● 定義靜態成員變數和靜態成員函式。靜態成員變數或靜態成員函式表示其不屬於任何乙個類例項,是類的所有類例項所其有的。實現在多物件例項間進行通訊,傳遞資訊。

如:#include"iostream.h"

#include"string.h"

class a

;int a::a=100;

int a::geta()

int a::getb()

void main(void)

14、c,c++的結構體有什麼區別?

● c的結構體是不能有函式成員的,只是一些已有資料結構組合而成,而c++類可以。

經典C C 面試題

c 面試題 1.介紹一下stl,詳細說明stl如何實現vector。answer stl 標準模版庫,standard template library.它由容器演算法迭代器組成。stl有以下的一些優點 可以方便容易地實現搜尋資料或對資料排序等一系列的演算法 除錯程式時更加安全和方便 即使是人們用s...

c c 程式設計面試題

c c 程式設計面試題07 c語言 c 程式設計面試題集錦 第七部分 1.介紹一下stl,詳細說明stl如何實現vector.answer stl 標準模版庫,standard template library.它由容器演算法迭代器組成。stl有以下的一些優點 可以方便容易地實現搜尋資料或對資料排序...

經典C C 面試題

經典c c 面試題 一 1.介紹一下stl,詳細說明stl如何實現vector。stl 標準模版庫,standard template library 它由容器演算法迭代器組成。stl有以下的一些優點 可以方便容易地實現搜尋資料或對資料排序等一系列的演算法 除錯程式時更加安全和方便 即使是人們用st...