C C C 面試題精選(2)

2021-06-18 04:37:47 字數 2759 閱讀 3831

題目(六):執行下列

c++**,輸出什麼?

struct

point3d ;

int_tmain(int argc, _tchar* argv)

答案:輸出

8。由於在

ppoint->z

的前面加上了取位址符號,執行到此時的時候,會在

ppoint

的指標位址上加

z在型別

point3d

中的偏移量

8。由於

ppoint

的位址是

0,因此最終

offset

的值是8

。&(ppoint->z)

的語意是求

ppoint

中變數z

的位址(

ppoint

的位址0加z

的偏移量

8),並不需要訪問

ppoint

指向的記憶體。只要不訪問非法的記憶體,程式就不會出錯。

題目(七):執行下列

c++**,輸出什麼?

classa

virtual

void print()

}; class

b: public a

virtual

void print()

}; int

_tmain(int argc, _tchar* argv)

答案:先後列印出兩行

:a is constructed. b is constructed. 呼叫b

的建構函式時,先會呼叫

b的基類及

a的建構函式。然後在

a的建構函式裡呼叫

print

。由於此時例項的型別

b的部分還沒有構造好,本質上它只是

a的乙個例項,他的虛函式表指標指向的是型別

a的虛函式表。因此此時呼叫的

print

是a::print

,而不是

b::print

。接著呼叫型別

b的建構函式,並呼叫

print

。此時已經開始構造

b,因此此時呼叫的

print

是b::print

。同樣是呼叫虛函式

print

,我們發現在型別

a的建構函式中,呼叫的是

a::print,在b

的建構函式中,呼叫的是

b::print

。因此虛函式在建構函式中,已經失去了虛函式的動態繫結特性。

題目(八):執行下列

c#**,輸出是什麼?

namespace

changesonstring

} }

答案:輸出是

hello

。由於在

.net

中,string

有乙個非常特殊的性質:

string

的例項的狀態不能被改變。如果

string

的成員函式會修改例項的狀態,將會返回乙個新的

string

例項。改動只會出現在返回值中,而不會修改原來的例項。所以本題中輸出仍然是原來的字串值

hello

。如果試圖改變

string

的內容,改變之後的值可以通過返回值拿到。用

stringbuilder

是更好的選擇,特別是要連續多次修改的時候。如果用

string

連續多次修改,每一次修改都會產生乙個臨時物件,開銷太大。

題目(九):

c++和

c#中,

struct

和class

有什麼不同

答案:

c++中,如果沒有標明函式或者變數是的訪問許可權級別,在

struct

中,是public

的;而在

class

中,是private的。在

c#中,如果沒有標明函式或者變數的訪問許可權級別,

struct

和class

中都是private

的。struct

和class

的區別是:

struct

定義值型別,其實例在棧上分配記憶體;

class

定義引用型別,其實例在堆上分配記憶體。

題目(十):執行下圖中的

c#**,輸出是什麼

?namespace

staticconstructor

} classb

public b()

} class

program }

}答案:列印出四行,分別是a1、

a3、a2、

a4。在呼叫型別

b的**之前先執行

b的靜態建構函式。靜態函式先初始化型別的靜態變數,再執行靜態函式內的語句。因此先列印

a1再列印

a3。接下來執行

b b = new b()

,即呼叫

b的普通建構函式。建構函式先初始化成員變數,在執行函式體內的語句,因此先後列印出a2、

a4。

C C C 面試題精選(2)

題目 六 執行下列 c 輸出什麼?struct point3d int tmain int argc,tchar argv 答案 輸出 8。由於在 ppoint z 的前面加上了取位址符號,執行到此時的時候,會在 ppoint 的指標位址上加 z在型別 point3d 中的偏移量 8。由於 ppoi...

C C C 面試題精選(2)

題目 六 執行下列 c 輸出什麼?struct point3d int tmain int argc,tchar argv 答案 輸出 8。由於在 ppoint z 的前面加上了取位址符號,執行到此時的時候,會在 ppoint 的指標位址上加 z在型別 point3d 中的偏移量 8。由於 ppoi...

C C C 面試題精選(2)

題目 六 執行下列c 輸出什麼?struct point3d int x int y int z int tmain int argc,tchar argv point3d ppoint null int offset int ppoint z printf d offset return 0 答案...