寫乙個函式返回1+2+3+…+n的值(假定結果不會超過長整型變數的範圍)
int sum( int n )
剖析:
對於這個題,只能說,也許最簡單的答案就是最好的答案。下面的解答,或者基於下面的解答思路去優化,不管怎麼「折騰」,其效率也不可能與直接return( 1 l + n ) * n / 2相比!
2,3,4一起解答:
void test1()
void test2()
strcpy( string, str1 );
}
void test3(char* str1)
}
解答:
試題2字串str1需要11個位元組才能存放下(包括末尾的』\0』),而string只有10個位元組的空間,strcpy會導致陣列越界;
對試題3,如果面試者指出字元陣列str1不能在陣列內結束可以給3分;如果面試者指出strcpy(string,str1)呼叫使得從str1記憶體起複製到string記憶體起所複製的位元組數具有不確定性可以給7分,在此基礎上指出庫函式strcpy工作方式的給10分;
對試題4,if(strlen(str1)<= 10)應改為if(strlen(str1) < 10),因為strlen的結果未統計』\0』所占用的1個位元組。
剖析:
考查對基本功的掌握:
(1)字串以』\0』結尾;
(2)對陣列越界把握的敏感度;
(3)庫函式strcpy的工作方式,如果編寫乙個標準strcpy函式的總分值為10,下面給出幾個不同得分的答案:
void getmemory( char*p )
void test( void )
char*getmemory( void )
void test( void )
void getmemory( char**p, int num )
void test( void )
void test( void )
解答:
試題5傳入中getmemory(char *p )函式的形參為字串指標,在函式內部修改形參並不能真正的改變傳入形參的值,執行完
char *str = null;
getmemory( str );
後的str仍然為null;
試題6中
char p = 「hello world」;
return p;
的p陣列為函式內的區域性自動變數,在函式返回後,記憶體已經被釋放。這是許多程式設計師常犯的錯誤,其根源在於不理解變數的生存期。
試題7的getmemory避免了試題4的問題,傳入getmemory的引數為字串指標的指標,但是在getmemory中執行申請記憶體及賦值語句
p = (char ) malloc( num );
後未判斷記憶體是否申請成功,應加上:
if ( *p == null )
試題8存在與試題7同樣的問題,在執行
char str = (char ) malloc(100);
後未進行記憶體是否申請成功的判斷;另外,在free(str)後未置str為空,導致可能變成乙個「野」指標,應加上:
str = null;
試題7的test函式中也未對malloc的記憶體進行釋放。
剖析:
試題4~7考查面試者對記憶體操作的理解程度,基本功紮實的面試者一般都能正確的回答其中50~60的錯誤。但是要完全解答正確,卻也絕非易事。
對記憶體操作的考查主要集中在:
1)指標的理解;
2)變數的生存期及作用範圍;
3)良好的動態記憶體申請和釋放習慣。
再看看下面的一段程式有什麼錯誤:
void swap( int* p1,int* p2 )
在swap函式中,p是乙個「野」指標,有可能指向系統區,導致程式執行的崩潰。在vc++中debug執行時提示錯誤「accessviolation」。該程式應該改為:
修改後:
void swap( int* p1,int* p2 )
試題1:分別給出bool,int,float,指標變數 與「零值」比較的 if 語句(假設變數名為var)
解答:
bool型變數:if(!var)
int型變數:if(var==0)
float型變數:
const float epsinon = 0.00001;
if ((x >= - epsinon) && (x <=epsinon)
指標變數: if(var==null)
剖析:
考查對0值判斷的「內功」,bool型變數的0判斷完全可以寫成if(var==0),而int型變數也可以寫成if(!var),指標變數的判斷也可以寫成if(!var),上述寫法雖然程式都能正確執行,但是未能清晰地表達程式的意思。
一般的,如果想讓if判斷乙個變數的「真」、「假」,應直接使用if(var)、if(!var),表明其為「邏輯」判斷;如果用if判斷乙個數值型變數(short、int、long等),應該用if(var==0),表明是與0進行「數值」上的比較;而判斷指標則適宜用if(var==null),這是一種很好的程式設計習慣。
浮點型變數並不精確,所以不可將float變數用「==」或「!=」與數字比較,應該設法轉化成「>=」或「<=」形式。如果寫成if(x == 0.0),則判為錯,得0分。
試題2:以下為windowsnt下的32位c++程式,請計算sizeof的值
void func ( char str[100] )
void*p = malloc( 100 );
sizeof ( p ) =?
解答:
sizeof( str ) = 4
sizeof ( p ) = 4
陣列名的本質如下:
(1)陣列名指代一種資料結構,這種資料結構就是陣列;
例如:char str[10];
cout << sizeof(str) << endl;
輸出結果為10,str指代資料結構char[10]。
(2)陣列名可以轉換為指向其指代實體的指標,而且是乙個指標常量,不能作自增、自減等操作,不能被修改;
char str[10];
str++; //編譯出錯,提示str不是左值
(3)陣列名作為函式形參時,淪為普通指標。
windows nt 32位平台下,指標的長度(占用記憶體的大小)為4位元組,故sizeof( str ) 、sizeof ( p) 都為4。
least = min(*p++, b);
#define min(a,b) ((a) <= (b) ? (a) : (b))
min(*p++, b)會產生巨集的***
試題8:請說出static和const關鍵字盡可能多的作用
解答:
static關鍵字至少有下列n個作用:
(1)函式體內static變數的作用範圍為該函式體,不同於auto變數,該變數的記憶體只被分配一次,因此其值在下次呼叫時仍維持上次的值;
(2)在模組內的static全域性變數可以被模組內所用函式訪問,但不能被模組外其它函式訪問;
(3)在模組內的static函式只可被這一模組內的其它函式呼叫,這個函式的使用範圍被限制在宣告它的模組內;
(4)在類中的static成員變數屬於整個類所擁有,對類的所有物件只有乙份拷貝;
(5)在類中的static成員函式屬於整個類所擁有,這個函式不接收this指標,因而只能訪問類的static成員變數。
const關鍵字至少有下列n個作用:
(1)欲阻止乙個變數被改變,可以使用const關鍵字。在定義該const變數時,通常需要對它進行初始化,因為以後就沒有機會再去改變它了;
(2)對指標來說,可以指定指標本身為const,也可以指定指標所指的資料為const,或二者同時指定為const;
(3)在乙個函式宣告中,const可以修飾形參,表明它是乙個輸入引數,在函式內部不能改變其值;
(4)對於類的成員函式,若指定其為const型別,則表明其是乙個常函式,不能修改類的成員變數;
(5)對於類的成員函式,有時候必須指定其返回值為const型別,以使得其返回值不為「左值」。例如:
const classa operator*(const classa& a1,const classa& a2);
operator*的返回結果必須是乙個const物件。如果不是,這樣的****也不會編譯出錯:
classa a, b, c;
(a * b) = c; // 對a*b的結果賦值
操作(a * b) = c顯然不符合程式設計者的初衷,也沒有任何意義。
剖析:
驚訝嗎?小小的static和const居然有這麼多功能,我們能回答幾個?如果只能回答1~2個,那還真得閉關再好好修煉修煉。
這個題可以考查面試者對程式設計知識的掌握程度是初級、中級還是比較深入,沒有一定的知識廣度和深度,不可能對這個問題給出全面的解答。大多數人只能回答出static和const關鍵字的部分功能。
經典C C 面試題
1.介紹一下stl,詳細說明stl如何實現vector。answer stl 標準模版庫,standard template library 它由容器演算法迭代器組成。stl有以下的一些優點 可以方便容易地實現搜尋資料或對資料排序等一系列的演算法 除錯程式時更加安全和方便 即使是人們用stl在uni...
C C 的面試題
1.new delete malloc free關係 它們都可用於申請動態記憶體和釋放記憶體。malloc 與free 是c c 語言的標準庫函式,new delete 是c 的運算子 關鍵字 注意 new delete 不是庫函式。對於非內部資料型別的物件而言,光用 maloc free 無法滿足...
經典C C 面試題
1.介紹一下stl,詳細說明stl如何實現vector。answer stl 標準模版庫,standard template library 它由容器演算法迭代器組成。stl有以下的一些優點 可以方便容易地實現搜尋資料或對資料排序等一系列的演算法 除錯程式時更加安全和方便 即使是人們用stl在uni...