C程式語言 列舉 結構 聯合

2021-08-19 08:38:31 字數 3960 閱讀 2429

標籤(空格分隔): c

10.1.1 列舉:列舉

常量符號化 列舉

列舉型別名字通常並不真的使用,要用的是在大括號裡的名字,因為它們就是常量符號,它們的型別是int,值則依次從0到n。如:

就建立了三個常量,red的值是0,yellow的值是1,green的值是2。

當需要一些可以排列起來的常量值時,定義列舉的意義就是給了這些常量值名字。

列舉量可以作為值

列舉型別可以跟上enum作為型別

但是實際上是以整數來做內部計算和外部輸入輸出的

套路:自動計數的列舉

列舉量列舉只是int

10.2.1 結構:結構型別

宣告結構型別

#include int main(int argc, char const *argv)

; struct date today;

today.month = 04;

today.day = 16;

today.year = 2018;

printf("today's date is %i-%i-%i.\n",

today.year,today.month,today.day);

return 0;

} today's date is 2018-4-16.

在函式內/外?

宣告結構的形式

struct point;

struct point p1,p2;

p1和p2都是point,裡面有x和y的值

struct p1,p2;

p1和p2都是一種無名結構,裡面有x和y

struct point p1,p2;

p1和p2都是point,裡面有x和y的值

結構變數

結構初始化

結構成員

結構用 . 運算子和名字訪問其成員

結構運算

結構指標

#include int main(int argc, char const *argv)

; struct date today;

today=(struct date);

struct date *pdate = &today;

printf("today's date is %i-%i-%i.\n",

today.year,today.month,today.day);

printf("address of today is %p\n", pdate);

return 0;

}

10.2.2 結構:結構與函式

結構作為函式引數

輸入結構

#include 

struct point ;

void getstruct(struct point);

void output(struct point);

int main(int argc, char

const *argv)

; getstruct(y);

output(y);

}void getstruct(struct point p)

void output(struct point p)

1223

12,23

0,0

解決的方案

在這個輸入函式中,完全可以建立乙個臨時的結構變數,然後把這個結構返回給呼叫者

#include 

struct point ;

struct point getstruct(void);

void output(struct point);

int main(int argc, char

const *argv)

; y = getstruct();

output(y);

}struct point getstruct(void)

void output(struct point p)

1223

12, 23

12, 23

結構指標作為引數

指向結構的指標

struct date  myday;

struct date *p = &myday;

(*p).month = 12;

p -> month = 12;

10.2.3 結構:結構中的結構

結構陣列

結構中的結構

struct dateandtime ;
巢狀的結構
struct point ;

struct rectangle ;

如果有變數

struct rectangle r;

就可以有:

r.pt1.x、 r.pt1.y,

r.pt2.x 和 r.pt2.y

如果有變數定義:

struct rectangle r, *rp;

rp = &r;

那麼下面的四種形式是等價的:

r.pt1.x

rp->pt1.x

(r.pt1).x

(rp->pt1).x

但是沒有rp->pt1->x (因為pt1不是指標)

結構中的結構的陣列
#include 

struct point;

struct rectangle ;

void printrect(struct rectangle r)

int main(int argc, char

const *argv)

, },

, }

};// 2 rectangles

for(i=0;i<2;i++)

}<1, 2> to <3, 4>

<5, 6> to <7, 8>

10.3.1 聯合:型別定義

自定義資料型別(typedef)

這樣,length 這個名字就可以代替int出現在變數定義和引數宣告的地方了:

typedef

typedef

long int64_t; //過載已有的型別名字,新名字的含義更清晰,具有可移植性

typedef

struct adate date; //簡化了複雜的數字

int64_t i = 1000000000;

date d = ;

typedef

int length;//length 就等價於int型別

typedef *char[10] strings;//strings 是10個字串的陣列的型別

typedef

struct node anode;

或typedef

struct node anode;//這樣用anode就可以代替struct node

10.3.2 聯合:聯合

聯合

union anelt  elt1,elt2;

elt1.i = 4;

elt2.c = 'a';

elt2.i = 0xdeadbeef;

儲存 初始化

union的用處

#include 

typedef

union chi;

int main(int argc, char

const *argv)

printf("\n");

return0;}

ffd2040000

C語言 列舉,聯合

7 列舉可以用來建立新的型別 8 列舉型別儲存區就是整數型別儲存區,列舉型別儲存區應該只能放有限的幾個整數 9 列舉型別也需要先宣告後定義,宣告使用enum關鍵字 10 宣告列舉型別的時候需要提供一組名稱,計算機為每個名稱分配乙個對應的整數,列舉型別只能存放這些整數 11 不同列舉型別所能記錄的整數...

C 結構 聯合與列舉

8.1 結構 是任意型別元素的集合。8.1.1 結構布局 結構型別的物件可以被賦值,作為實參傳入函式,或者作為函式返回。struct readout 布局方式 1 4 4 1 4 sizeof readout 12 短長短的風格,剩餘空間未使用 struct readout 布局方式 4 2 4 s...

C語言中結構 聯合 列舉的說明

複雜的資料型別 一般的步驟 1 宣告模板 2 定義變數,分配記憶體空間 3 初始化 標記 識別符號 標籤 結構 設計程式很重要的一步是提高表示資料的能力,選擇表示資料的方法。c提供了結構變數 structure variable 提高你表示資料的能力。結構宣告 structure variable ...