c語言程式基礎學習筆記

2021-09-17 01:28:12 字數 1447 閱讀 5438

筆者最近在閱讀《c和c++程式設計師面試秘籍》時有了一些收穫,特總結一下,分享給大家。

第一題:i++與++i的區別:

#includeint main()

程式第7行,i先自增,再被輸出列印因此輸出為9,i的值也變為9

程式第8行,i先自減,再被輸出列印因此輸出為8,i的值也變為8

程式第9行,先列印輸出當前i的值8,i再自增,i的值變為9,大家要注意,列印和自增 的順序,千萬別入坑

程式第10行,先列印輸出當前i的值9,i再減,i的值變為8,注意同上

程式第11行,先列印-i,為-9,i再自增1,此時i的值變為9

程式第12行,先列印-i,為-8,i再自減1,此時i的值變為8

第二題:i++和++i的區別:

我查閱了一下資料,將大家的看法總結一下:

如果沒有用到返回值的話,區別在於效率。

若i是內建的數值型別,兩者完全一樣。

若i是一些自定義的類,如iterator,++i的效率 > = i++的效率對於後者推薦都用++i;對於前者,用哪個是程式風格問題,i++的好處是更符合人類思維習慣,++i的好處是每次都用這種形式就不用考慮i的型別。

大家需要注意的是,字首式(++i)可以返回物件的引用,而字尾(i++)必須返回物件的值,所以在大物件的時候產生複製開銷,引起效率低。

答案如下:

內建資料型別的情況,效率沒有區別

自定義資料型別的情況,++i的效率較高

第三題:有符號變數與無符號變數的值的轉換:

#includechar getchar(int x,int y)

int main()

這題的考點是當表示式中存在有符號型別和無符號型別時,所有的運算元都自動轉化成無符號數,也就是原數的補碼

c1 = 1

c2 = 2

c3 = 2

而c4 = 1

因為-8的原碼是1000_1000,補碼為1111_1000

與7相加0000_0111值為1111_1111差1就正好溢位。

第四題:不使用任何中間變數將a,b中的值進行交換

法一:

#includevoid swap1(int a,int b)

;int main()

此時輸出結果為a1 =2,b1 =1;

法二:

#includevoid swap2(int a,int b)

;int main()

此時輸出結果為a2 =4,b2 =3;

總結一下,法一採用了加減法來達到交換a,b的目的。這種方法的缺點是a+b,和a-b運算時可能會導致溢位

法二,採用按位異或的方式交換a,b。按位異或運算子"^"的功能是將參與運算的兩數各對應的二進位制位相異或,如果對應的二進位制位相同,則為0,不同為1。這樣運算三次就可交換a,b的值。

C語言基礎學習筆記

1.變數,變數的輸出 include int main 字串佔位符是 s,指標佔位符為 zd,指標的長度都為8位。p是位址佔位符,int陣列之間位址差值為4 2.風格 printf 積分等級 c n score 逗號後面跟空格。3.乙個漢字是3個位元組,乙個位元組佔8位。4.陣列 include i...

C語言基礎學習筆記 指標

1.指標的概念 指標 pointer 是程式語言中的乙個物件,利用位址,它的值直接指向 points to 存在電腦儲存器中另乙個地方的值。由於通過位址能找到所需的變數單元,可以說,位址指向該變數單元。因此,將位址形象化的稱為 指標 位址就是記憶體的實體地址 使用指標的目的 要通過指標能夠找到被指的...

C語言基礎學習筆記 巨集

巨集定義 define用來定義乙個識別符號和乙個字串,用這個識別符號替代這個字串。1.不帶引數的巨集定義 define 巨集名 字串 表示這是一條預處理命令 巨集名,是乙個識別符號,要符合識別符號的命名規則,並要求大寫 字串的位置可以是常量 表示式 格式字串 注意 巨集定義不是語句,不需要在末尾加分...