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 變數列表,可以省略,建議省略...