www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 公眾號精選 > C語言與CPP編程
[導(dǎo)讀]前言:?經(jīng)?;仡機(jī)/C面試題和筆試題,有助于我們對C/C基礎(chǔ)有一個新的認(rèn)識和記憶。在實際工作中,大部分人會被業(yè)務(wù)纏身,基礎(chǔ)慢慢的遺忘了,對很多基礎(chǔ)知識欲言又止!回顧筆試面試題目,會讓我們對基礎(chǔ)知識掌握更加牢固,同時筆試題也有助于我們開闊思路,提高編程能力,還有就是開源代碼閱讀,只...

前言:?經(jīng)?;仡機(jī)/C 面試題和筆試題,有助于我們對C/C 基礎(chǔ)有一個新的認(rèn)識和記憶。在實際工作中,大部分人會被業(yè)務(wù)纏身,基礎(chǔ)慢慢的遺忘了,對很多基礎(chǔ)知識欲言又止!回顧筆試面試題目,會讓我們對基礎(chǔ)知識掌握更加牢固,同時筆試題也有助于我們開闊思路,提高編程能力,還有就是開源代碼閱讀,只有不斷的回顧和學(xué)習(xí),才能不斷的進(jìn)步。

加油吧!打工人!~

面試題 1:內(nèi)存對齊的原則以及作用?
(1)結(jié)構(gòu)體內(nèi)的成員按自身長度自對齊(32位機(jī)器上,如char=1,short=2,int=4,double=8),所謂自對齊是指該成員的起始地址必須是它自身長度的整數(shù)倍。如int只能以0,4,8這類地址開始。
(2)結(jié)構(gòu)體的總大小為結(jié)構(gòu)體的有效對齊值的整數(shù)倍(默認(rèn)以結(jié)構(gòu)體中最長的成員長度為有效值的整數(shù)倍,當(dāng)用#pragrma pack(n)指定時,以n和結(jié)構(gòu)體中最長的成員的長度中較小者為其值)。即sizeof的值,必須是其內(nèi)部最大成員的整數(shù)倍,不足的要補(bǔ)齊。
例如:
class?A
{
????char?c;
????int?a;
????char?d;
};
?
cout?<?
class?B
{
????char?c;
????char?d;
????int?a;
};
?
cout?<sizeof(A)=12,sizeof(B)=8;
因為左邊是1 (3) 4 1 (3)=12,而右邊是1 1 (2) 4=8。括號中為補(bǔ)齊的字節(jié)。
內(nèi)存對齊的作用:
1、平臺原因(移植原因):不是所有的硬件平臺都能訪問任意地址上的任意數(shù)據(jù)的;某些硬件平臺只能在某些地址處取某些特定類型的數(shù)據(jù),否則拋出硬件異常。
2、性能原因:經(jīng)過內(nèi)存對齊后,CPU的內(nèi)存訪問速度大大提升。
面試題 2:變量的聲明和定義有什么區(qū)別為變量分配地址和存儲空間的稱為定義,不分配地址的稱為聲明。一個變量可以在多個地方聲明,但是只在一個地方定義。加入 extern 修飾的是變量的聲明,說明此變量將在文件以外或在文件后面部分定義。說明:很多時候一個變量,只是聲明不分配內(nèi)存空間,直到具體使用時才初始化,分配內(nèi)存空間, 如外部變量。面試題 3:explicit關(guān)鍵字的作用C 中, 一個參數(shù)的 構(gòu)造函數(shù)(或者除了第一個參數(shù)外其余參數(shù)都有默認(rèn)值的多參構(gòu)造函數(shù)), 承擔(dān)了兩個角色。1 是個 構(gòu)造器 ,2 是個默認(rèn)且隱含的類型轉(zhuǎn)換操作符。
所以, 有時候在我們寫下如 AAA = XXX, 這樣的代碼, 且恰好XXX的類型正好是AAA單參數(shù)構(gòu)造器的參數(shù)類型, 這時候 編譯器就自動調(diào)用這個構(gòu)造器, 創(chuàng)建一個AAA的對象。
這樣看起來好象很酷, 很方便。但在某些情況下(見下面權(quán)威的例子), 卻違背了我們(程序員)的本意。這時候就要在這個構(gòu)造器前面加上explicit修飾, 指定這個構(gòu)造器只能被明確的調(diào)用/使用, 不能作為類型轉(zhuǎn)換操作符被隱含的使用。
class?Test1
{
public:
????Test1(int?n)
????{
????????num=n;
????}//普通構(gòu)造函數(shù)
private:
????int?num;
};
class?Test2
{
public:
????explicit?Test2(int?n)
????{
????????num=n;
????}//explicit(顯式)構(gòu)造函數(shù)
private:
????int?num;
};
int?main()
{
????Test1?t1=12;//隱式調(diào)用其構(gòu)造函數(shù),成功
????Test2?t2=12;//編譯錯誤,不能隱式調(diào)用其構(gòu)造函數(shù)
????Test2?t2(12);//顯式調(diào)用成功
????return?0;
}
Test1的 構(gòu)造函數(shù)帶一個int型的參數(shù),代碼23行會隱式轉(zhuǎn)換成調(diào)用Test1的這個構(gòu)造函數(shù)。而Test2的構(gòu)造函數(shù)被聲明為explicit(顯式),這表示不能通過隱式轉(zhuǎn)換來調(diào)用這個構(gòu)造函數(shù),因此代碼24行會出現(xiàn)編譯錯誤。
普通構(gòu)造函數(shù)能夠被 隱式調(diào)用。而explicit構(gòu)造函數(shù)只能被顯式調(diào)用。
面試題 4:寫出 bool 、int、 float、指針變量與“零值”比較的 if 語句bool 型數(shù)據(jù):?
if(?flag?)?
{?
??A;?
}?
else?
{?
? B;?
}?
int 型數(shù)據(jù):?
if(?0?!=?flag?)?
{?
??A;?
}?
else?{?
? B;?
}?
指針型數(shù):?
if(?NULL?==?flag?)?
{?
??A;?
}?
else?{?
? B;?
}?
float 型數(shù)據(jù):?
if?(?(?flag?>=?NORM?)?
本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
關(guān)閉
關(guān)閉