(1). 結構和聯合都是由多個不同的資料型別成員組成
, 但在任何同一時刻
, 聯合中只存放了乙個被選中的成員(所有成員共用一塊位址空間)
, 而結構的所有成員都存在(不同成員的存放位址不同)。
(2). 對於聯合的不同成員賦值
, 將會對其它成員重寫
, 原來成員的值就不存在了
, 而對於結構的不同成員賦值是互不影響的。
int a=4;
int &f(int x)
int main(void)
常考的題目。從定義上來說:
過載:是指允許存在多個同名函式,而這些函式的參數列不同(或許引數個數不同,或許引數型別不同,或許兩者都不同)。
重寫:是指子類重新定義父類虛函式的方法。
從實現原理上來說:
過載:編譯器根據函式不同的參數列,對同名函式的名稱做修飾,然後這些同名函式就成了不同的函式(至少對於編譯器來說是這樣的)。如,有兩個同名函式:function func(p:integer):integer;
和function func(p:string):integer;
。那麼編譯器做過修飾後的函式名稱可能是這樣的:
int_func
、str_func
。對於這兩個函式的呼叫,在編譯器間就已經確定了,是靜態的。也就是說,它們的位址在編譯期就繫結了(早繫結),因此,過載和多型無關!
重寫:和多型真正相關。當子類重新定義了父類的虛函式後,父類指標根據賦給它的不同的子類指標,動態的呼叫屬於子類的該函式,這樣的函式呼叫在編譯期間是無法確定的(呼叫的子類的虛函式的位址無法給出)。因此,這樣的函式位址是在執行期繫結的(晚繫結)。
答案:當類中含有const
、reference
成員變數;基類的建構函式都需要初始化表。
答案:不是。兩個不同型別的指標之間可以強制轉換(用reinterpret cast)。c#
是型別安全的。
答案:全域性物件的建構函式會在main
函式之前執行。
1) 從靜態儲存區域分配。內存在程式編譯的時候就已經分配好,這塊內存在程式的整個執行期間都存在。例如全域性變數,
static
變數。2) 在棧上建立。在執行函式時,函式內區域性變數的儲存單元都可以在棧上建立,函式執行結束時這些儲存單元自動被釋放。棧記憶體分配運算內置於處理器的指令集。
3) 從堆上分配,亦稱動態記憶體分配。程式在執行的時候用
malloc
或new
申請任意多少的記憶體,程式設計師自己負責在何時用
free
或delete
釋放記憶體。動態記憶體的生存期由程式設計師決定,使用非常靈活,但問題也最多。
答案:
bool : if ( !a ) or if(a)
int : if ( a == 0)
float : const expression exp = 0.000001
if ( a < exp && a >-exp)
pointer : if ( a != null) or if(a == null)
答案:
const作用:定義常量、修飾函式引數、修飾函式返回值三個作用。被
const
修飾的東西都受到強制保護,可以預防意外的變動,能提高程式的健壯性。
1) const
常量有資料型別,而巨集常量沒有資料型別。編譯器可以對前者進行型別安全檢查。而對後者只進行字元替換,沒有型別安全檢查,並且在字元替換可能會產生意料不到的錯誤。
2) 有些整合化的除錯工具可以對
const
常量進行除錯,但是不能對巨集常量進行除錯。
陣列要麼在靜態儲存區被建立(如全域性陣列),要麼在棧上被建立。指標可以隨時指向任意型別的記憶體塊。
(1)修改內容上的差別
char a = 「hello」;
a[0] = 『x』;
char *p = 「world」; // 注意
p 指向常量字串
p[0] = 『x』; // 編譯器不能發現該錯誤,執行時錯誤
(2) 用運算子
sizeof
可以計算出陣列的容量(位元組數)。
sizeof(p),p
為指標得到的是乙個指標變數的位元組數,而不是
p 所指的記憶體容量。
c++/c
語言沒有辦法知道指標所指的記憶體容量,除非在申請記憶體時記住它。注意當陣列作為函式的引數進行傳遞時,該陣列自動退化為同型別的指標。
char a = "hello world";
char *p = a;
cout<< sizeof(a) << endl; // 12 位元組
cout<< sizeof(p) << endl; // 4 位元組
計算陣列和指標的記憶體容量
void func(char a[100])
C 面試出現頻率最高的面試題
相同 memtest mtest1 new memtest 10 memtest是非原子型別,memtest 10 呼叫10次非原子型別 memtest mtest2 new memtest int pint1 new int 10 int a 10 int 10 是型別,呼叫10次int原子型別 ...
c 求陣列中出現頻率最高的數
在c 中求陣列中出現頻率最高的數mode。即 眾數 mode 統計學名詞,在統計分布上具有明顯集中趨勢點的數值,代表資料的一般水平 眾數可以不存在或多於乙個 修正定義 是一組資料中出現次數最多的數值,叫眾數,有時眾數在一組數中有好幾個。用m表示。理性理解 簡單的說,就是一組資料中佔比例最多的那個數。...
今天面試遇到的一道C語言題目
今天面試三道c語言上機題目,我完成了前兩道,但是最後的這道題目卻讓我搞到為難。題目大概是這樣的。有int getstring char buffer,char addr 函式原型,其中第乙個引數是乙個指向內容的字元指標,這些內容中有多個以 0 結為的字串,最後結束位置為兩個 0 第二個引數為將來儲存...