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.設某檔案經內排序後得...