筆試形式為50分鍾50道題,其中30道選擇,20道判斷。包括C,python和算法題。
涉及到不熟悉或有所遺忘的知識點如下:
函數指針
函數存放在內存的代碼區域內,它們同樣有地址.如果我們有一個 int test(int a) 的函數,那么,它的地址就是函數的名字,這一點如同數組一樣,數組的名字就是數組的起始地址。
函數指針的定義方式
data_types (*func_pointer)( data_types arg1, data_types arg2, ...,data_types argn);
int (*fp)(int a);
// 這里就定義了一個指向函數(這個函數參數僅僅為一個 int 類型,函數返回值是 int 類型)的指針 fp。
注意:函數指針所指向的函數一定要保持函數的返回值類型,函數參數個數,類型一致。
運算符優先級
enum
使用 enum 工具不僅能夠創建符號常量,還能定義新的數據類型。
枚舉量的聲明和定義
(1) 首先,請看下面的語句:
enum enumType {Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday};
- 第一:聲明 enumType 為新的數據類型,稱為枚舉(enumeration);
- 第二:聲明 Monday、Tuesday 等為符號常量,通常稱之為枚舉量,其值默認分別為 0-6。
(2) 接着利用新的枚舉類型 enumType 聲明這種類型的變量:enumType Weekday 就像使用基本變量類型int聲明變量一樣,如 int a; 也可以在定義枚舉類型時定義枚舉變量
enum enumType {Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday}Weekday;
- 在不進行強制轉換的前提下,只能將定義的枚舉量賦值給該種枚舉的變量,也就是說 Weekday 只能是定義的 Monday-Sunday 這些定義過的枚舉量。
- 而不能將非枚舉量賦給枚舉變量,如:Weekday = 10; 是不允許的
(3) 允許將枚舉量賦給非枚舉變量。如:int a=Monday; 因為枚舉量是符號常量,這里的賦值編譯器會自動把枚舉量轉換為int類型。
(4) 可以對枚舉量進行賦值運算,但不能進行算術運算,因為這些操作可能導致違反類型限制。
(5) 枚舉量能參與其他類型變量的運算,因為編譯器會自動把枚舉量轉換為 int 類型。
(6) 可以通過強制轉換將其他類型值賦給枚舉變量。但是,如果試圖將一個超出枚舉取值范圍的值通過強制轉換賦給枚舉變量,結果將是不確定的,這么做不會出錯,但得不到想要的結果。
自定義枚舉量的值
(1) 我們可以顯式的設置枚舉量的值,指定的值必須是整數。
enum enumType {Monday=1, Tuesday=2, Wednesday=3, Thursday=4, Friday=5, Saturday=6, Sunday=7};
(2) 也可以只顯式的定義一部分枚舉量的值:
enum enumType {Monday=1, Tuesday, Wednesday=1, Thursday, Friday, Saturday, Sunday};
- 這樣 Monday、Wednesday 均被定義為 1,則 Tuesday=2,Thursday、Friday、Saturday、Sunday 的值默認分別為 2、3、4、5。
總結:未被初始化的枚舉值的值默認將比其前面的枚舉值大1。
(3) 第二條還說明另外一個現象,就是枚舉量的值可以相同。
枚舉的取值范圍
- 枚舉的上限是 大於最大枚舉量的 最小的 2 的冪,減去 1;
- 枚舉的下限有兩種情況:
- 一、枚舉量的最小值不小於 0,則枚舉下限取 0;
- 二、枚舉量的最小值小於 0,則枚舉下限是小於最小枚舉量的最大的 2 的冪,加上 1。
假如定義 enum enumType1 { First=-5,Second=14,Third=10 }; 則枚舉的上限是 16-1=15(16大於最大枚舉量14,且為2的冪),枚舉的下限是-8+1=-7(-8小於最小枚舉量-5,且為2的冪);
C++語法細節
this指針
- 在 C++ 中,每一個對象都能通過 this 指針來訪問自己的地址。
- this 指針是所有成員函數的隱含參數。因此,在成員函數內部,它可以用來指向調用對象。
- this只能在非靜態成員函數中使用。全局函數、靜態函數、友元函數都不能使用this.
二維數組
- 定義二維數組維度需要確定為長度
- 初始化不可以忽略每個一維矩陣的維度,即列數。系統不能從初始化結構讀取列數,而行數可以根據初始化確定,所以可以忽略不寫。
int a[2][2] = {{1,2},{3,4}};//最正常的初始化,謹記多維數組是數組的數組
int a[2][2] = {1,2,3,4};//與上等價,但這樣看起來不是很方便
int a[2][2] = {{1},{2}};//只初始化每一行的第一個元素,其它執行默認初始化
int a[2][2] = {1,2,3};//逐個放進去
int a[][3] = { 1, 2, 3, 4, 5, 6 } ; // 系統根據初始化元素的個數和第二維的長度來確定第一維的長度。
switch()
一個 switch 語句允許測試一個變量等於多個值時的情況。每個值稱為一個 case,且被測試的變量會對每個 switch case 進行檢查。
switch 語句必須遵循下面的規則:
- switch 語句中的 expression 必須是一個整型或枚舉類型,或者是一個 class 類型,其中 class 有一個單一的轉換函數將其轉換為整型或枚舉類型。
- 在一個 switch 中可以有任意數量的 case 語句。每個 case 后跟一個要比較的值和一個冒號。
- case 的 constant-expression 必須與 switch 中的變量具有相同的數據類型,且必須是一個常量或字面量。
- 當被測試的變量等於 case 中的常量時,case 后跟的語句將被執行,直到遇到 break 語句為止。
- 當遇到 break 語句時,switch 終止,控制流將跳轉到 switch 語句后的下一行。
- 不是每一個 case 都需要包含 break。如果 case 語句不包含 break,控制流將會 繼續 后續的 case,直到遇到 break 為止。
- 一個 switch 語句可以有一個可選的 default case,出現在 switch 的結尾。default case 可用於在上面所有 case 都不為真時執行一個任務。default case 中的 break 語句不是必需的。