#include using namespace std;
class a {};
class a1 {};
class b : public a {};
class c : public virtual b {};
class d : public a, public a1 {};
int main()
空類所佔空間為1,單一繼承的空類空間也為1,多重繼承的空類空間也為1,但是虛繼承涉及到虛表(虛指標),所以大小為4。1、sizeof操作符的結果型別是size_t,它在標頭檔案中的typedef為unsigned int型別。該型別保證能容納實現所建立的最大物件的位元組大小。2、sizeof運算子,strlen是函式。
3、sizeof可以用型別或函式做引數,strlen只能用char*做引數,且必須以"\0"結尾的。
4、陣列做sizeof的引數不退化,傳遞給strlen就退化為指標。
5、大部分編譯程式在編譯的時候就把sizeof計算過了,是型別或是變數的長度,這就是sizeof(x)可以用來定義陣列維數的原因。
6、strlen的結果要在執行的時候才能計算出來,用來計算字串的長度,而不是型別佔記憶體的大小。
7、sizeof後如果是型別必須加括號,如果是變數名可以不加括號,這是因為sizeof是操作符而不是函式。
8、當使用了乙個結構型別或變數時,sizeof返回實際的大小。當使用一靜態的空間陣列時,sizeof返回全部陣列的尺寸。sizeof不能返回被動態分配的陣列或外部的陣列的尺寸,sizeof計算棧中分配的大小,不計算靜態變數。
9、陣列作為引數傳給函式時傳的是指標而不是陣列,傳遞的是陣列的首位址,如:func(char [8]), func(char ), func(char*)等價。在c++中傳遞陣列永遠都是傳遞指向陣列首元素的指標,編譯器不知道陣列的大小,如果想在函式內知道陣列的大小,需要進入函式後用memcpy將陣列複製出來,長度由另乙個形參傳進去。
10、計算結構變數的大小就必須討論資料對齊問題。
11、sizeof操作符不能用於函式型別、不完全型別或位字段。不完全型別指具有未知儲存大小資料的資料型別,如未知儲存大小的陣列型別、未知內容的結構或聯合型別、void型別等。
例如:
char* p;
p="hello";
會報錯(vs),因為p本身並不指向乙個存在的位址。
總結起來:
因為這個函式返回的是乙個區域性變數位址,當呼叫這個函式後,這個區域性變數str就隨著過程棧的釋放而釋放啦,所以返回的結果是不確定的,而且還是不安全的。
下面的**:
#include using namespace std;
char strone[14];
char* stra()
int main()
2023年3月8日C 學習筆記
1.const double pi 3.1415926 變數pi是用常量表示式初始化的,放在標頭檔案中 2.三種初始化 string 物件的方法 1 不帶初始化式,使用預設建構函式初始化 string 物件。2 使用乙個已存在的 string 物件作為初始化式,將新建立的 string 物件初 始化...
2023年8月25日 學習筆記 概率
面試題 please write out the program.include include define loop 1000 void main int ragnc 0 for int i 0 i loop i int x rand int y rand if x x y y 解析一下 設上面...
Android 學習筆記 2023年8月
8月7日 自定義view 加滾動條 這是來自中移動論壇的帖子 1.android自定義控制項是通過繼承view類實現的,新建乙個view類的子類,然後重寫ondraw方法,加入你建立的類名為 myview 那麼在activity中setcontentview myview 就可以顯示你自己定義的控制...