C C 筆記(C語言重要問題,結構體篇)

2021-07-15 05:36:12 字數 1203 閱讀 5789

為什麼要寫結構體?因為用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...