為什麼要寫結構體?因為用c++較多。class用多了,結構體就忘了。回頭一看,結構體原來還有這麼多坑。
struct teacher
;//要使用struct teacher,可以像下面這麼搞,這是最常見用法。
typedef struct teacher
teacher;
teacher t;
這些使用方式不好,但可以通過執行
typedef struct teacher
teacher;
struct teacher
t1,t2;
或者直接隱式定義
struct
t1,t2;
//常規方式
typedef struct teacher
teacher;
teacher t=;
//匿名
struct
t1,t2={};
//直接初始化
struct teacher
t1=;
1. 點與箭頭
t1.age 類似t1.age的簡單點(.)操作,
算出age相對於t1的大偏移量。計算在cpu中
p1->age 就是(*p1).age
2.深拷貝與淺拷貝
兩個結構體賦值,編譯器提供等號操作。就當int型別做就行了,但是這裡存在乙個陷阱,那就是深拷貝,淺拷貝。
注意:深拷貝與淺拷貝在後面也會提及
struct person;
直接方式,兩個結構體物件元素的不同指標同時指向了乙個地方。(淺拷貝)
編譯器的等號只能將變數的值拷貝,不會拷貝記憶體空間。
這種情況要自己寫函式,自己分配處理記憶體空間。
例如:memcpy(pto,pfrom,sizeof(person );
那麼pfrom.pname與pto.pname指向同一位置,free刪掉乙個另乙個也會受影響。
這時就需要單獨寫深拷貝函式。
3. 結構體的高階用途
偏移量求出作業系統關鍵位置的偏移
struct p
;結構體就儲存乙個int ,乙個指標。由於off會產生空間偏移,實際位置會溢位我們傳統控制的空間。溢位多少我們可以明確控制。
C C 筆記(C語言重要問題重講,資料篇)
筆記原在個人印象筆記,現在整理搬運。1.陣列的坑 int a printf a is d,a is d,a 1 is d,a 1 is d n a,a,a 1,a 1 這裡a 與 a值是一樣的,都是4127200 a 代表陣列的首元素位址 a 代表整個陣列的位址 2.typedef的使用 這種用法c...
C C 筆記(C語言重要問題,指標與陣列篇)
指標的本質就是4位元組。研究指標的步驟 1.別看星,看變數 如int p a 2.兩次取位址無意義,因為 a就是個數。如 a無意義,這麼寫就直接報錯了 指標宣告與使用,星號 表示的含義不同。3.指標宣告時,表示宣告的變數為指標 4.指標使用時,表示操作指標所指向的記憶體空間值。指標使用時,p相當於通...
C語言筆記之結構體篇
1 c語言允許使用者自己建立由不同型別資料組成的組合型的資料結構,稱為結構體。2 一般形式 struct 結構體名 花括號內是該結構體所包括的子項,稱為結構體的成員。3 型別名 成員名 成員表列 也稱為 域表 每乙個成員是結構體中的乙個域。成員名命名規則與變數名相同。成員可以屬於另乙個結構體型別。4...