Nowcoder專項練習 C (九)

2021-09-22 18:51:27 字數 2301 閱讀 4273

1,指標實現變數交換問題

對於問題:

void

swap_int

(int

*a,int

*b)

對於上面的**,如果是兩個負數,比如-5和-7

,以4bit為例:

以補碼形式可得,-5 = 1011,-7 = 1001

(-5)+ (-7)= 10100=0100=4 (溢位後為4)

4-(-7)= 4 +7=0100 + 0111 = 1011 = -5的補碼

4-(-5)= 4 + 5 = 0100 + 0101 = 1001 = -7的補碼

即,可能發生溢位,但是最後結果是做正確的,即可以實現交換。

但是,需要保證輸入的兩個引數不能指向同乙個位址,否則,無論兩個數字是多少,交換之後,結果都為0。

即:*a=*a+*b;對一塊記憶體賦值,*b=*a-*b;將改塊記憶體中的值賦值為0;

2,函式的引數傳遞問題

對於問題:

intf(

int a,

int b,

int c)

intmain()

乍一看,這個編譯不通過。

但是,printf是有返回值的,返回值是輸出的字元的個數,是int型。

在x86架構(linux或unix系統)上,函式的引數是通過棧傳遞的。因此引數從右往左入棧順序是:printf(「c」),printf(「b」),printf(「a」)。依次計算出結果:cba

3,模板類的宣告

函式模板的格式如下:

template《型別 形參名1,型別 形參名2...>

型別有class和typename。

因此,正確的例子有:

4,隱含的this指標

對於問題:

下面程式段包含4個函式,其中具有隱含this指標的是哪乙個?

intf1(

);class

t;

this指標只能在類的成員函式中使用,它指向該成員函式被呼叫的物件。

因此:

因此,只有f4()有this指標。

5,32位和64位下各變數所佔位元組數

32,64位編譯環境下的sizeof問題經常出現。

不過,兩者環境下的資料型別所佔位元組數都是一樣的:

資料型別

所佔位元組數

char

1short

2int

4long long

8float

4double

8long double

8不同的是:

1,long的位元組數不同

2,指標型別大小不同

6,常量、指標常量、常量指標

對於問題:

給出以下定義,下列哪些操作是合法的?

const

char

*p1 = 「hello」;

char

*const p2 = 「world」;

a. p1++;

b. p1[2] = 『w』;

c. p2[2] = 『l』;

d. p2++;

這道題,選擇a。

首先,我們有口訣:

左定值,右定向。即:

由上面的兩個規則,b、d都是錯的。

由於 「world「儲存在字元常量區,不能直接修改其值,故c錯。

若要修改其值,應該改為char str = 「world」;

7,靜態聯編與動態聯編

8,預設建構函式問題

對於問題:

有以下**:

struct foo

foo(

int)

void

fun()}

;int

main()

在上面的**中,最終會出問題是語句4

因為,語句3並沒有宣告乙個b的foo型別,而是定義了乙個無引數的、返回型別為foo的函式b

如果要宣告乙個foo,並呼叫預設建構函式,那麼應該是:

foo b;

9,預設引數問題

10,c語言中的檔案

Nowcoder專項練習 C (十三)

設定虛基類的目的是 多重繼承的示例 以左側的圖為例 多重繼承的定義 乙個派生類 d 有兩個或者兩個以上的基類 b和c 多重繼承引發的二義性 假如上述這些基類 b和c 具有相同的基類a,a中的成員資料和成員函式,最終都會以雙份的形式拷貝到類d之中,那麼呼叫它們的時候就會出現二義性的問題。虛基類 專門用...

wbs專項練習

2009上17題 不是wbs的正確分解方法或結構。a 把主要的專案可交付物和子專案作為第一層 b 在同一wbs層上採用不同的分解方法 c 在不同wbs層上可採用不同的分解方法 d 把專案生命期作為第一層,專案交付物作為第二層 答案解析 b 我們通常用wbs模板來製作wbs,最終的結構可以有 把主要的...

排序專項練習

1.當待排序記錄已經從小到大排序或者已經從大到小排序時,快速排序的執行時間最省 答案 b 2.以下排序中時間複雜度最差的是 答案 b 3.最壞情況下 insert sort,quick sort merge sort 的複雜度分別是多少?答案 b 快排在已排序情況下效率最低!4.設某檔案經內排序後得...