自定義型別 結構體

2021-08-16 15:37:22 字數 2362 閱讀 3387

struct tag

//結構體型別名稱

variable

-list;//結構體變數

省略結構體型別名稱(匿名結構體型別)

當省略掉結構體型別名稱時,就不能省略掉結構體變數,這樣是不合理的,所以一般我們不建議省略結構體型別名

struct  

x,y;//全域性變數

struct

a[20],*p;

int main()

注意:對於結構體而言,即使兩個結構體成員完全一樣,但依然是兩種型別,其定義的變數不能互相指向注意:乙個結構體只能指向自身結構體型別所定義的變數2.省略結構體變數

完全可以,如下段**:

struct  a

;int main()

結構體成員可以是變數、陣列、指標、甚至其他結構體成員

結構體成員訪問

結構體變數訪問成員 通過點操作符(.)訪問

結構體指標訪問成員通過指向操作符(->)訪問

struct  a

;int main()

如下段**,這樣的結構體自引用是錯誤的,因為定義乙個變數必先開闢空間,而我們不知道struct a的空間大小

struct  a

;

如果我們非要自己應用自己呢?

如下段**,是正確的結構體自引用方式,要自引用就必須引用自身變數的指標(因為指標不管是什麼型別都佔四個位元組大小的空間)

struct  a

;

注意,如下**typedef關鍵字是定義乙個新的型別。當typedef定義結構體時,結構體被定義後才能使用,如下兩段**(第一段錯誤**,第二段正確**):

typedef

struct

node;

typedef

struct node

node;//node代表一種型別

struct b;//不完整宣告

struct a

;struct b

;

結構體變數的初始化和陣列的初始化是一樣的只允許集體初始化,但是不允許集體賦值

#include

struct point

p1;//宣告型別的時候同時定義變數p1

struct node

;int main()

;//初始化:定義變數的同時賦值

struct node n1 = ,null };//結構體巢狀初始化

struct node n2;

//n2 = , null };//錯誤**(結構體不可以被整體賦值)

system("pause");

return

0;}

第乙個成員在與結構體變數偏移量為0的位址處

其他成員變數要對齊到某個數字(對齊數)的整數倍的位址處。對齊數=編譯器預設的乙個對齊數和成員大小中的較小值。(vs中預設值為8,linux預設值為4)

結構體總大小為最大對齊數(每個成員都有乙個對齊數)的整數倍

如果巢狀了結構體的情況,巢狀的結構體對齊到自己的最大對齊數的整數被處,結構體的整數大小就是所有最大對齊數(含巢狀結構體的對齊數)的整數倍。

#include

#pragma pack(8)//設定預設對齊數

#pragma pack(8)//設定預設對齊數

自定義型別 結構體(1)

結構體與陣列的區別 陣列的元素可以通過下標訪問,這是因為,陣列的長度相同。但是,結構體每乙個成員的長度都可能不同,所以不能通過下標來訪問它們,但是,結構體的每個成員都有自己的名字,結構體是通過名字來訪問的。結構體宣告結構體是一些值的集合,這些值稱為它的成員,乙個結構體的各個成員具有不同的型別。str...

結構體自定義型別的知識

1 結構體是是一些值的集合,這些值被稱為成員變數。2 結構體內的成員可以是不同型別的成員變數。3 建立結構體 struct s 4 結構體內部成員的訪問 1 結構體變數訪問成員 結構變數的成員是通過點操作符 訪問的.操作符接受兩個運算元。如果s是結構體的具體名稱,age 是其內部成員,則s.age就...

自定義型別 結構體 列舉 聯合

結構體 所謂結構體,就是將一大堆值放在一起,建立乙個新的型別,這些成員可以是不同型別的變數。struct tag variable list tag 要求 1.見名知意 2.可以省略 3.不建議省略 member list c語言中,不能為空 variable list 變數列表,可以省略,建議省略...