- 相關(guān)推薦
C++基礎面試題
1,以下代碼中的兩個(gè)sizeof用法有問(wèn)題嗎?
sizeof如用于數組,只能測出靜態(tài)數組的大小,無(wú)法檢測動(dòng)態(tài)分配的或外部數組大小。注意:數組名作為函數參數時(shí),退化為指針。數組名作為sizeof()參數時(shí),數組名不退化,因為sizeof不是函數。
請問(wèn)以下代碼有什么問(wèn)題
int main()
{
char a;
char *str = &a;
strcpy(str,”hello”);
printf(str);
return 0;
}
沒(méi)有為str分配內存空間,將會(huì )發(fā)生異常
問(wèn)題出在將一個(gè)字符串復制進(jìn)一個(gè)字符變量指針所指地址。雖然可以正確輸出結果,但因為越界進(jìn)行內在讀寫(xiě)而導致程序崩潰。
Strcpy的在庫函數string.h中,程序的主要程序在于越辦進(jìn)行內存讀寫(xiě)導致程序崩潰。
2,const char* s = “AAA”;
Printf(“%s”,s);
S[0] = ‘B’;
Printf(“%s”,s);
“AAA”是字符串常量,S是指針,指向這個(gè)字符串常量,所以聲明s的時(shí)候就有問(wèn)題。
Const char* s =”AAA”,然后又因為是常量,所以對S[0]的賦值操作是不合法的。
3,Char szstr[10];
Strcpy(szstr,”0123456789″);
產(chǎn)生什么結果?為什么?
正常輸出,長(cháng)度不一樣,會(huì )造成非法的OS,覆蓋別的內容
4,交換兩個(gè)變量的值,不使用第三個(gè)變量。即a=3,b=5,交換之后a=5,b=3;
兩種解法,一種是用算術(shù)算法,一種是用^(異或)
a = a+b;
b = a-b;
a = a-b;
or
a = a^b;//只能對int ,char
b = a^b;
a = a^b;
or
a ^= b ^=a;
5,指出下面代碼的輸出,并解釋為什么
main()
{
int a[5] = {1,2,3,4,5};
int *ptr = (int *)(&a+1);
printf(“%d,%d”,*(a+1),*(ptr-1));
}
輸出:2,5
6,將”引用”作為函數返回值類(lèi)型的格式、好處和需要遵守的規則
格式:類(lèi)型標識符 &函數名(形參列表及類(lèi)型說(shuō)明){//函數體}
格式:在內存中不產(chǎn)生被返回值的副本:(注意:正是因為這點(diǎn)原因,所以返回一個(gè)局部變量的引用是不可取的。因為隨著(zhù)該局部變量生存期的結束,相應的引用也會(huì )失效。)
注意事項:
不能返回局部變量的引用。主要原因是局部變量會(huì )在函數返回時(shí)被銷(xiāo)毀,因此被返回的引用就成為了”無(wú)所指的”引用,程序會(huì )進(jìn)入未知狀態(tài)。
不能返回函數內部new分配的內存的引用。雖然不存在局部變量的被動(dòng)銷(xiāo)毀問(wèn)題,可對于這種情況(返回函數內部new分配內存的引用),又面臨其它尷尬的局面。如,被函數返回的引用只是作為一個(gè)臨時(shí)變量出現,而沒(méi)有被賦予一個(gè)實(shí)際的變量,那么這個(gè)引用所指向的空間(由new分配)就無(wú)法釋放。
可以返回類(lèi)成員的引用,但最好是const。主要原因是當對象的屬性是與某種業(yè)務(wù)規則相關(guān)聯(lián)時(shí),其賦值常常與某些其它屬性或者對象的狀態(tài)有關(guān),因此有必要將賦值操作封裝在一個(gè)業(yè)務(wù)規則當中。如果其它對象可以獲得該屬性的非常量引用(或指針),那么對該屬性的單純賦值就會(huì )破壞業(yè)務(wù)規則的完整性。
多態(tài)的作用:
隱藏實(shí)現細節,使得代碼能夠模塊化;擴展代碼模塊,實(shí)現代碼重用;
接口重用:為了類(lèi)在繼承和派生的時(shí)候,保證使用家庭中任一類(lèi)的實(shí)例的某一屬性時(shí)的正確調用。
精彩文章推薦:
【C++基礎面試題】相關(guān)文章:
經(jīng)典C/C++面試題07-11
華為C++/MFC面試題07-11
java 基礎面試題07-11
華為全套面試題(基礎版)07-11
華為全套面試題(基礎版)107-11
華為C/C++筆試題07-11
華為C/C++筆試題系列二07-11
面試題與技巧07-12
華為面試題07-11
「MySQL」經(jīng)典面試題07-11