GEEK学习笔记— —程序猿面试宝典笔记(二)
所謂筆記,就是比較個(gè)人的東西,把個(gè)人認(rèn)為有點(diǎn)意思的東西記錄下來~~
程序猿面試寶典筆記(一)基本概念
程序猿面試寶典筆記(二)預(yù)處理、const和sizeof
程序猿面試寶典筆記(三)auto_ptr、遞歸
程序猿面試寶典筆記(四)面向?qū)ο?、類型轉(zhuǎn)換、static
程序猿面試寶典筆記(五)數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)
程序猿面試寶典筆記(六)軟件測試
題目
寫一個(gè)“標(biāo)準(zhǔn)”宏MIN。這個(gè)宏輸入兩個(gè)參數(shù)并返回較小的一個(gè)。
解析
為什么要把如此簡單的題目也放進(jìn)來呢?為了強(qiáng)調(diào)宏定義里面括號(hào)的重要性!
。!
答案
#define MIN(A,B) ((A) <= (B) ? (A) : (B))題目
const與指針的關(guān)系?const成員函數(shù)?以及mutable!
解析
一般分為4種情況:
int b = 500; const int* a = &b; int const* a = &b; int* const a = &b; const int* const a = &b;答案
1)先看情況1。假設(shè)const位于星號(hào)的左側(cè),則const就是用來修飾指針?biāo)赶虻淖兞?#xff0c;即指針指向?yàn)槌A俊<僭O(shè)const位于星號(hào)的右側(cè)。const就是修飾指針本身。即指針本身是常量。
因此,1和2的情況同樣,都是指針?biāo)赶虻膬?nèi)容為常量(const放在變量聲明符的位置無關(guān)),這樣的情況下不同意對(duì)內(nèi)容進(jìn)行更改操作。
對(duì)于情況1。能夠先不進(jìn)行初始化。
由于盡管指針內(nèi)容是常量。但指針本身不是常量。
2)情況2與情況1同樣。
3)情況3為指針本身是常量。這樣的情況下不能對(duì)指針本身進(jìn)行更改操作,而指針?biāo)赶虻膬?nèi)容不是常量。
對(duì)于情況3,定義時(shí)必須同一時(shí)候初始化。
4)對(duì)于情況4為指針本身和指向的內(nèi)容均為常量。
以下再說一下const成員函數(shù)是什么?
我們定義的類的成員函數(shù)中。經(jīng)常有一些成員函數(shù)不改變類的數(shù)據(jù)成員,也就是說。這些函數(shù)是“僅僅讀”函數(shù)。而有一些函數(shù)要改動(dòng)類數(shù)據(jù)成員的值。
假設(shè)把不改變數(shù)據(jù)成員的函數(shù)都加上const關(guān)鍵字進(jìn)行標(biāo)識(shí)。顯然??商岣叱绦虻目勺x性。事實(shí)上,它還能提高程序的可靠性,已定義成const的成員函數(shù),一旦企圖改動(dòng)數(shù)據(jù)成員的值,則編譯器按錯(cuò)誤處理。
在const成員函數(shù)中。用mutable修飾成員變量名后,就能夠突破const的限制,改動(dòng)類的成員變量了。
題目
const與#define相比有什么不同?
答案
C++語言能夠用const定義常量,也能夠用#define定義常量,可是前者比后者有很多其它的長處:
● const常量有數(shù)據(jù)類型。而宏常量沒有數(shù)據(jù)類型。編譯器能夠?qū)η罢哌M(jìn)行類型安全檢查,而對(duì)后者僅僅進(jìn)行字符替換,沒有類型安全檢查。而且在字符替換中可能會(huì)產(chǎn)生意料不到的錯(cuò)誤(邊際效應(yīng))。
● 有些集成化的調(diào)試工具能夠?qū)onst常量進(jìn)行調(diào)試,可是不能對(duì)宏常量進(jìn)行調(diào)試。
在C++程序中僅僅使用const常量而不使用宏常量,即const常量全然代替宏常量。
題目
以下兩段程序分別輸出什么?
代碼一
代碼二
#include <iostream>using namespace std;#pragma pack(1) class A { private:static bool a;int b;bool c; };class B { private:int b;bool a;bool c; };int main() {cout << sizeof(A) << endl;cout << sizeof(B) << endl;return 0; }解析
非常明顯,這道題是考察結(jié)構(gòu)的對(duì)齊。
一般來說。為了方便對(duì)結(jié)構(gòu)體內(nèi)元素的訪問和管理。結(jié)構(gòu)體的長度一定是最長的數(shù)據(jù)元素的整數(shù)倍。
代碼一類A的對(duì)齊為
|bool|—-|—-|—-|
|——–int———|
|bool|—-|—-|—-|
代碼一類B的對(duì)齊為
|——–int———|
|bool|bool|—-|—-|
而代碼二用pack預(yù)處理指令來禁止對(duì)齊調(diào)整。所以就是本身的內(nèi)存大小。
可是須要注意sizeof是計(jì)算棧中分配的內(nèi)存大小,靜態(tài)變量是存放在全局?jǐn)?shù)據(jù)區(qū)。不會(huì)被計(jì)算在內(nèi)。
答案
代碼一:類A 12字節(jié);類B 8字節(jié)
代碼二:類A 5字節(jié);類B 6字節(jié)
轉(zhuǎn)載于:https://www.cnblogs.com/wzjhoutai/p/7286925.html
總結(jié)
以上是生活随笔為你收集整理的GEEK学习笔记— —程序猿面试宝典笔记(二)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Dell 笔记本的 BIOS设置 USB
- 下一篇: 8.依赖的传递、排除、冲突