標籤(空格分隔): 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 ...