一、請填寫bool , float, 指標變數與「零值」比較的 if 語句。(10分)
提示:這裡「零值」可以是0, 0.0 , false或者「空指標」。例如 int 變數 n
與「零值」比較的 if 語句為:
if ( n == 0 )
if ( n != 0 )
以此類推。
請寫出 bool flag 與「零值」比較的 if 語句:
請寫出 float x 與「零值」比較的 if 語句:
請寫出 char *p 與「零值」比較的 if 語句:
二、以下為windows nt下的32位c++程式,請計算sizeof的值(10分)
char str = 「hello」 ;
char *p = str ;
int n = 10;
請計算sizeof (str ) =
sizeof ( p ) =
sizeof ( n ) = void func ( char str[100])
void *p = malloc( 100 );
請計算sizeof ( p ) =
三、簡答題(25分)
1、標頭檔案中的 ifndef/define/endif 幹什麼用?
2、#include 和 #include 「filename.h」 有什麼區別?
3、const 有什麼用途?(請至少說明兩種)
4、在c++ 程式中呼叫被 c編譯器編譯後的函式,為什麼要加 extern 「c」宣告?
5、請簡述以下兩個for迴圈的優缺點
// 第乙個
for (i=0; i
// 第二個
if (condition)
else
優點:缺點:
優點:缺點:
四、有關記憶體的思考題(20分)
void getmemory(char *p)
void test(void)
請問執行test函式會有什麼樣的結果?
答:char *getmemory(void)
void test(void)
請問執行test函式會有什麼樣的結果?
答:void getmemory2(char **p, int num)
void test(void)
請問執行test函式會有什麼樣的結果?
答:void test(void)
}請問執行test函式會有什麼樣的結果?
答:五、編寫strcpy函式(10分)
已知strcpy函式的原型是
char *strcpy(char *strdest, const char *strsrc);
其中strdest是目的字串,strsrc是源字串。
(1)不呼叫c++/c的字串庫函式,請編寫函式 strcpy
(2)strcpy能把strsrc的內容複製到strdest,為什麼還要char * 型別的返回值?
六、編寫類string的建構函式、析構函式和賦值函式(25分)
已知類string的原型為:
class string
;請編寫string的上述4個函式。
1.求下面函式的返回值(微軟)
int func(x)
return countx;
} 假定x = 9999。 答案:8
思路:將x轉化為2進製,看含有的1的個數。
2. 什麼是「引用」?申明和使用「引用」要注意哪些問題?
答:引用就是某個目標變數的「別名」(alias),對應用的操作與對變數直接操作效果完全相同。申明乙個引用的時候,切記要對其進行初始化。
引用宣告完畢後,相當於目標變數名有兩個名稱,即該目標原名稱和引用名,不能再把該引用名作為其他變數名的別名。宣告乙個引用,不是新定義了乙個變數,它只表示該引用名是目標變數名的乙個別名,它本身不是一種資料型別,因此引用本身不佔儲存單元,系統也不給引用分配儲存單元。不能建立陣列的引用。
3. 將「引用」作為函式引數有哪些特點?
(1)傳遞引用給函式與傳遞指標的效果是一樣的。這時,被調函式的形參就成為原來主調函式中的實參變數或物件的乙個別名來使用,所以在被調函式中對形參變數的操作就是對其相應的目標物件(在主調函式中)的操作。
(2)使用引用傳遞函式的引數,在記憶體中並沒有產生實參的副本,它是直接對實參操作;而使用一般變數傳遞函式的引數,當發生函式呼叫時,需要給形參分配儲存單元,形參變數是實參變數的副本;如果傳遞的是物件,還將呼叫拷貝建構函式。因此,當引數傳遞的資料較大時,用引用比用一般變數傳遞引數的效率和所佔空間都好。
(3)使用指標作為函式的引數雖然也能達到與使用引用的效果,但是,在被調函式中同樣要給形參分配儲存單元,且需要重複使用"*指標變數名"的形式進行運算,這很容易產生錯誤且程式的閱讀性較差;另一方面,在主調函式的呼叫點處,必須用變數的位址作為實參。而引用更容易使用,更清晰。
4. 在什麼時候需要使用「常引用」?
如果既要利用引用提高程式的效率,又要保護傳遞給函式的資料不在函式中被改變,就應使用常引用。常引用宣告方式:const 型別識別符號 &引用名=目標變數名;
例1int a ;
const int &ra=a;
ra=1; //錯誤
a=1; //正確
例2string foo( );
void bar(string & s);
那麼下面的表示式將是非法的:
bar(foo( ));
bar("hello world");
原因在於foo( )和"hello world"串都會產生乙個臨時物件,而在c++中,這些臨時物件都是const型別的。因此上面的表示式就是試圖將乙個const型別的物件轉換為非const型別,這是非法的。
引用型引數應該在能被定義為const的情況下,盡量定義為const 。
5. 將「引用」作為函式返回值型別的格式、好處和需要遵守的規則?
格式:型別識別符號 &函式名(形參列表及型別說明)
好處:在記憶體中不產生被返回值的副本;(注意:正是因為這點原因,所以返回乙個區域性變數的引用是不可取的。
因為隨著該區域性變數生存期的結束,相應的引用也會失效,產生runtime error!
注意事項:
(1)不能返回區域性變數的引用。這條可以參照effective c++[1]的item 31。主要原因是區域性變數會在函式返回後被銷毀,因此被返回的引用就成為了"無所指"的引用,程式會進入未知狀態。
(2)不能返回函式內部new分配的記憶體的引用。這條可以參照effective c++[1]的item 31。雖然不存在區域性變數的被動銷毀問題,可對於這種情況(返回函式內部new分配記憶體的引用),又面臨其它尷尬局面。
例如,被函式返回的引用只是作為乙個臨時變數出現,而沒有被賦予乙個實際的變數,那麼這個引用所指向的空間(由new分配)就無法釋放,造成memory leak。
華為面試題六套
1.求下面函式的返回值 微軟 int func x return countx 假定x 9999。答案 8 思路 將x轉化為2進製,看含有的1的個數。2.什麼是 引用 申明和使用 引用 要注意哪些問題?答 引用就是某個目標變數的 別名 alias 對應用的操作與對變數直接操作效果完全相同。申明乙個引...
華為面試題
華為軟體研發面試題2 收藏 c語言面試題大彙總之華為面試題 eddy整理 1 區域性變數能否和全域性變數重名?答 能,區域性會遮蔽全域性。要用全域性變數,需要使用 區域性變數可以與全域性變數同名,在函式內引用這個變數時,會用到同名的區域性變數,而不會用到全域性變數。對於有些編譯器而言,在同乙個函式內...
華為面試題
形式,一面二面都是一對一,一百多張桌子的宴會廳,去了之後,到你的面試的時間點會點名簽到,然後簽到完了坐等裡面hr出來提人。一面沒見刷人的,我見到的所有人都通過了。至於面試問題,不同hr問的可能完全不同,我跟乙個同學就沒有相同的問題。華為問到我的問題 一面說乙個你做的專案,你專案中你承擔的部分,還有遇...