華為C/C++筆試題
華為筆試題 - 華為C/C++筆試題(面試題)
oo1、區域性變數能否和全域性變數重名?
oo答:區域性變數可以與全域性變數同名,在函式內引用這個變數時,會用到同名的區域性變數,而不會用到全域性變數。對於有些編譯器而言,在同一個函式內可以定義多個同名的區域性變數,比如在兩個迴圈體內都定義一個同名的區域性變數,而那個區域性變數的作用域就在那個迴圈體內
oo
oo2、如何引用一個已經定義過的全域性變數?
oo 答:可以用引用標頭檔案的方式,也可以用extern關鍵字,如果用引用標頭檔案方式來引用某個在標頭檔案中宣告的全域性變理,假定你將那個變寫錯了,那麼在編譯期間會報錯,如果你用extern方式引用時,假定你犯了同樣的錯誤,那麼在編譯期間不會報錯,而在連線期間報錯。(不要問我什麼是編譯期間,什麼是連線期間,請自己查資料)
oo
oo
oo3、全域性變數定義在可被多個.C檔案包含的.標頭檔案中可不可以?為什麼?
oo答:可以,但要加static
oo
oo4、語句for( ;1 ;)有什麼問題?它是什麼意思?
oo答:死迴圈,同while(1),這種寫法並不規範,可讀性差,一般不用
oo
oo5、do……while和while……do有什麼區別?
oo答:前一個迴圈一遍再判斷,後一個判斷以後再迴圈
oo
oo6、請寫出下列程式碼的輸出內容
oo#include
oomain()
oo{
ooint a,b,c,d;
ooa=10;
oob=a++;
ooc=++a;
ood=10*a++;
ooprintf("b,c,d:%d,%d,%d",b,c,d);
ooreturn 0;
oo}
oo答:10,12,120
oo
oo7.static函式與普通函式有什麼區別?
oo只在當前原始檔中使用的函式應該說明為內部函式(static),內部函式應該在當前原始檔中說明和定義。對於可在當前原始檔以外使用的函式,應該在一個頭檔案中說明,要使用這些函式的原始檔要包含這個標頭檔案。
oo
oo8.static全域性變數與普通的全域性變數有什麼區別?
oo全域性變數(外部變數)的說明之前再冠以static 就構成了靜態的全域性變數。全域性變數本身就是靜態儲存方式,靜態全域性變數當然也是靜態儲存方式。
oo 這兩者在儲存方式上並無不同。這兩者的區別雖在於非靜態全域性變數的作用域是整個源程式,當一個源程式由多個原始檔組成時,非靜態的全域性變數在各個原始檔中都是有效的。而靜態全域性變數則限制了其作用域, 即只在定義該變數的原始檔內有效,在同一源程式的其它原始檔中不能使用它。由於靜態全域性變數的作用域侷限於一個原始檔內,只能為該原始檔內的函式公用,因此可以避免在其它原始檔中引起錯誤。從以上分析可以看出,把區域性變數改變為靜態變數後是改變了它的儲存方式即改變了它的生存期。把全域性變數改變為靜態變數後是改變了它的作用域,限制了它的使用範圍。
oo
oo9.程式的區域性變數存在於(棧)中,全域性變數存在於(靜態區)中,動態申請資料存在於(堆 )中。
oo
oo10.設有以下說明和定義:
ootypedef union {long i; int k[5]; char c;} DATE;
oostruct data { int cat; DATE cow; double dog;} too;
ooDATE max;
oo則語句 printf("%d",sizeof(struct date)+sizeof(max));的執行結果是:___52____
oo
oo11.佇列和棧有什麼區別?
oo佇列先進先出,棧後進先出
oo
oo12.寫出下列程式碼的輸出內容
oo#include
ooint inc(int a)
oo{
ooreturn(++a);
oo}
ooint multi(int*a,int*b,int*c)
oo{
ooreturn(*c=*a**b);
oo}
ootypedef int(FUNC1)(int in);
ootypedef int(FUNC2) (int*,int*,int*);
oo
oovoid show(FUNC2 fun,int arg1, int*arg2)
oo{
ooINCp=&inc;
ooint temp =p(arg1);
oofun(&temp,&arg1, arg2);
ooprintf("%d ",*arg2);
oo}
oo
oomain()
oo{
ooint a;
ooshow(multi,10,&a);
ooreturn 0;
oo}
oo
oo翻譯一下
oo==================================
oo#include
oousing namespace std;
oo
oo// 返回a + 1
ooint inc(int a){
ooreturn a+1;
oo}
oo// out = a*b
ooint multi(int& a, int& b, int& out){
ooreturn out = a*b;
oo}
oo
oo// 定義兩種函式,FUNC1對應inc, FUNC2對應 multi
ootypedef int(FUNC1) (int in);
ootypedef int(FUNC2) (int&,int&,int&);
oo
oo// 詭異的函式,這是模糊C大賽麼...
oovoid show( FUNC2* func, int num, int& out ){
ooFUNC1* pInc = inc;//原文這句寫錯了...orz... INC根本沒定義
ooint numAdd1 = pInc( num );
oo// 等價於 numAdd1 = inc( num );
oo// 結果 num仍然是10, numAdd1 = 11
oo
oo// 呼叫func函式,可以看到, main中傳給func的是 multi.
oo// 所以呼叫的是 multi( 11, 10, out ), out = 110
oofunc( numAdd1, num, out );
oocout
oo
ooint main(){
ooint a;
ooshow(multi,10, a);
ooreturn 0;
oo}
oo==================================
oo
oo13.請找出下面程式碼中的所以錯誤
oo說明:以下程式碼是把一個字串倒序,如“abcd”倒序後變為“dcba”
oo==================================
oomain(){
oochar*src="hello,world";
oochar* dest=NULL;
oo
ooint len=strlen(src);
oodest=(char*)malloc(len);//!1 少分配了一位元組. strlen計數不包括
oo
oochar* d = dest;
oochar* s = src[len];//!2 兩個錯誤. 應該為 &src[ len-1 ]
oowhile( len-- != 0 )
ood++=s--;//!3 *d++ = *s--;
oo//!4 尾部要,應加上 *d = 0;
oo
ooprintf("%s",dest);
ooreturn 0;
oo}
oo==================================
oo
oo修正後的答案:
oo==================================
ooint main(){
oochar* src = "hello,world";
oo
ooint len = strlen(src);
oochar* dest = (char*)malloc(len+1);.
oo
oochar* d = dest;
oochar* s = &src[len-1];
oowhile( len-- != 0 )
oo*d++=*s--;
oo*d = 0;
oo
ooprintf("%s",dest);
ooreturn 0;
oo}
【華為C/C++筆試題】相關文章: