C C 學習 自定義資料型別(結構體,共用體)

2021-10-06 21:43:46 字數 4555 閱讀 6376

struct  student

;

1、結構體型別宣告一般放在程式檔案開頭,此時這個宣告是全域性的。在全域性作用域內,該宣告處處可見,因此同作用域內的所有函式都可以使用它。

2、結構體型別的宣告也可以放在函式內部,此時這個宣告是區域性的。

說明:(1)結構體型別和普通資料型別(eg:int ,char ,double 等)一樣是型別名稱,而不是該型別的乙個實體,因此不會為結構體型別分配儲存空間。

(2)結構體型別宣告時成員可以又是結構體型別;

二、結構體型別的例項化

1、定義結構體物件有兩種形式

(1)結構體型別名 結構體物件名列表;

student a,b;

//定義結構體物件

(2)

結構體型別名 結構體物件名列表;

date d1,d2;

//定義結構體物件

三、結構體物件的記憶體形式

例項化結構體物件後,物件會得到儲存空間。

struct  student

;

struct staff s1,s2;

staff s1=

,2700.0};

staff s2=

;

四、結構體物件成員引用

結構體物件名.成員名;

staff a,b;

a.no=

1002

;a.no++

;

1、如果成員本身又是乙個結構體物件,就要用成員引用運算子,一級一級的引用。

staff x;

x.birthday.year=

1994

;x.birthday.month=3;

x.birthday.day=

10;

2、不能將乙個結構體物件作為整體進行輸入和輸出,只能對結構體中物件的成員逐個進行輸入和輸出。

3、結構體物件可以進行賦值運算,但不能對進行算數運算、關係運算等。

complex m,n,k;

m=n;

//正確

k=m+n;

//錯誤

m>n;

//錯誤

一、陣列元素可以是結構體型別,稱為結構體陣列。

struct 結構體型別名 結構體陣列名[常量表示式];

struct  point

;point points[

100]

;

二、一維結構體陣列的初始化

1、struct 結構體型別名 結構體陣列名[常量表示式]=;

struct rect

;rect rects[3]

=,,}

;

2、引用結構體陣列成員需要將陣列下標運算、物件成員引用運算結合起來操作。

陣列物件名[下標表示式].成員名;

rects[0]

.left=

10;

3、結構體型別中可以包含陣列成員,陣列成員型別既可以是基本資料型別又可以是指標型別或結構體型別。

struct ******** 

******** tri;

tri.p[0]

.x=10

;tri.p[0]

.y=10

;//結構體物件.陣列成員[下標表示式].成員名

eg:輸入20個學生資訊,按成績遞減排序;成績相同時,按學號遞增排序。

#include

using

namespace std;

#define n 20

struct tagstudent

;int

main()

for(i =

0; i < n-

1; i++

)//排序}}

for(i =

0; i < n; i++

)return0;

}

staff m;

int*p1;

char

*s1,

*s2;

p1=&m.no;

// 取no成員的位址

s1=m.name;

//name成員是陣列,陣列名即是位址

s2=&m.***;

//取***成員的位址

struct staff m,

*p;p=

&m;

2、假設p是指向結構體物件的指標,通過p引用結構體物件成員又兩種方式:

(1)物件法 :(*p).成員名

(2)指標法 :p->成員名

p-

>no=

4200;p-

>salary=p-

>salary+

500.0;p-

>no++

;

3、如果成員本身又是乙個結構體物件指標,就要用指標成員引用運算子一級一級地引用成員。

date d=

;teacher a=

,*p=

&a;p-

>no=

1000;p-

>pbirthday-

>year=

2018

;

1、將結構體物件作為函式實參傳遞到函式中,採用值傳遞方式。

struct data

;void

fun1

(data x)

;//函式原型

void

fun2()

;fun1

(a);

//函式呼叫

}

2、將結構體陣列作為函式引數,採用位址傳遞方式。函式呼叫實參是陣列名,形參必須是同型別的結構體陣列。

void

fun3

(data x)

;//函式原型

void

fun4()

;fun3

(a);

//函式呼叫

}

採用位址傳遞方式,形引數組的首位址與實參陣列完全相同。

3、將結構體指標作為函式引數,採用位址傳遞方式

void

fun5

(data *p)

;//函式原型宣告

void

fun6()

;fun3

(&a)

;//函式呼叫

}

4、函式的返回型別可以是結構體型別,這時函式將返回乙個結構體物件。

data

fun8()

;return a;

//返回結構體物件,複製到臨時物件中

}void

fun9()

一、

union a

;

3、定義共用體物件可以進行初始化,但只能按乙個成員給予初值,

union a x=

;//正確,只能給出乙個初值。考慮記憶體

union a y=

;//錯誤,結構體做法

4、共用體物件的使用主要是引用它的成員,方法是物件成員引用運算(.)

x.m=

5678

;cout<

x.n++

;

5、總結由於成員是共享儲存空間,使用共用體物件成員時有如下特點:

(1)修改乙個成員會使其他成員發生改變,所有成員儲存的總是最後一次修改的成果

(2)所有成員的值是相同的,區別是不用的型別決定了使用這個值的全部或者部分

(3)所有成員的起始位址值是相同的,因此通常只按乙個成員輸入和初始化;

一、1、列舉型別是由使用者自定義的由多個命名列舉常量構成的型別

enum 列舉型別名 ;

enum  days 

;//

enum direction  dir=left;
2、當給列舉型別物件賦值時,若時除列舉值之外的其他值,編譯器會給出錯誤資訊。

一、可以用typedef宣告乙個新型別名來代替已有型別名,

typedef 已有型別名 新型別名;

其中已有型別名必須時已存在的資料型別的名稱,新型別名是識別符號序列,習慣用大寫標識;如果是多個新型別名,用逗號(,)作為間隔。最後以分號(;)結束。

typedef

unsigned

char byte;

自定義資料型別 結構體

陣列是一種資料形式,其特點是多個相同型別的元素集合起來 結構體是另一種重要的資料形式,特點是將不同型別的成員組合起來 陣列和結構體形成了兩種風格迥異的聚合方式,通過他們以及相互組合,巢狀的機制可以構造出複雜的,滿足應用要求的自定義資料型別 結構體允許將不同型別的資料元素組合到一起形成一種新的資料型別...

自定義資料型別 結構型別

c 中自定義資料型別還有一種稱為結構型別,並且把該型別的各種資料型別一一整合到其中。學號 型別 姓名 字串 學生年齡 整型 院系 字串 平均成績 浮點型 每個學生的資訊成為了乙個整體,雜亂的資料和每個學生一一對應了起來,方便管理。如果需要建立學生型別,就可以這樣寫。include using nam...

自定義型別 結構體

struct tag 結構體型別名稱 variable list 結構體變數 省略結構體型別名稱 匿名結構體型別 當省略掉結構體型別名稱時,就不能省略掉結構體變數,這樣是不合理的,所以一般我們不建議省略結構體型別名 struct x,y 全域性變數 struct a 20 p int main 注意...