一種使用者定義的資料型別,用enum來宣告
enum 列舉型別名字;
列舉型別名字通常並不常用,使用的是在大括號裡的名字,因為它們就是常量符號,它們的型別是int,值依次從0到n。
如:enum colors;
這樣子就可建立了三個常量,red的值是0,yellow的值是1,green是2。列舉的意義就是給這些常量值名字。
宣告列舉量的時候可以指定值。如:
enum color;
結構與本地變數一樣,在函式內部宣告的結構型別只能在函式內部使用,通常在函式外部宣告結構型別,這樣就可被多個函式所使用。
1.宣告結構的形式
形式一:
struct point
;struct point p1,p2;
//p1與p2都是point,裡面有x與y的值。
例如:
#include
intmain
(int argc,
char
const
*ar**)
;struct date today;
today.month=07;
today.day=31;
today,year=
2014
;printf
("today's date is %i-%i-&i.\n"
,today.year,today.month,today,day)
;return0;
}
形式二:
struct
p1,p2;
//p1與p2都是一種無名結構,裡面有x和y
形式三:
struct pointp1.p2;
//p1與p2都是point,裡面有x和y的值t
2.結構的初始化#include
struct date
;int
main
(int argc,
char
const
*ar**)
;struct date thismonth=
;printf
("today'date is %i-%i-%i.\n"
,today.year,today.month,today.day)
;//2014-7-31
printf
("this month is %i-%i-%i.\n"
,thismonth.year,thismonth.month,thismonth.day)
;//2014-7-0
return0;
}//若沒給值,則自動認為為0
3.結構成員
陣列用運算子與下標訪問其成員。
結構用**.**運算子與名字訪問其成員。
如:today.day p1.x
4.結構運算
要訪問整個結構,直接用結構變數的名字。
對於整個結構,可以做賦值、取位址,也可以傳遞給函式引數。
如:(陣列無法完成這兩種運算)
p1=
(struct point)
;//相當於p1.x=5;p1.y=10;
pl=p2;
//相當於p1.x=p2.x;p1.y=p2.y;
5.結構指標
與陣列不同,結構變數的名字並不是結構變數的位址,必須使用&運算子。
struct date *pdate=&today;
1.結構作為函式引數
int numberofdays(struct date d)
整個結構可以作為引數的值傳入函式,這時候是在函式內新建乙個結構變數,並複製呼叫者的結構的值。也可以返回乙個結構。
2.輸入結構
沒有直接的方式可以一次scanf乙個結構。
#include
struct point
;coid getstruct
(struct point)
;void
output
(struct point)
;void
main()
;getstruct
(y);
output
(y);
}void
getstruct
(struct point p)
void
output
(struct point p)
//c在函式中的p與main中的y是不同的。在函式讀入了p的數值之後,沒有任何東西回到main,所以y還是
解決方案:
之前的方案把乙個結構傳入了函式,然後在函式中操作。但是沒有返回回去,問題在於傳入函式的是外面那個結構的轉殖體,而不是指標。傳入結構與傳入陣列是不一樣的。在這個輸入函式中,完全可以建立乙個臨時的結構變數,然後把這個結構返回給呼叫者。
#include
struct point
;struct point getstruct
(void);
void
output
(struct point)
;int
main
(int argc,
char
const
*ar**)
; y=
getstruct()
;output
(y);
}struct point getstruct
(void
)void
output
(struct point p)
3.指向結構的指標struct date
myday;
struct date *p=
&myday;
(*p)
.month=
12p->month=12;
//用->m表示指標所指的結構變數中的成員
1.結構陣列struct date dates[
100]
;struct date dates=
,};
2.結構中的結構struct dateandtime
3.巢狀的結構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不是指標)
可惡的C語言 結構體與鍊錶
1 結構體宣告struct 結構體名稱 struct說明這是乙個結構體的宣告 例如 struct book 2 定義結構體型別變數 struct 結構體名稱 結構體變數名 3 初始化結構體變數struct book book 4 初始結構體的指定成員值 其語法與陣列指定初始化元素類似,不過結構體指定...
可惡的C語言 迴圈
while 迴圈條件 中部分稱為迴圈體,迴圈體內必須有改變條件的機會,否則為死迴圈。do while 迴圈條件 for 初始動作 迴圈繼續的條件 迴圈每輪要做的動作 若有固定次數,則選用for迴圈。若必須執行一次,則選用do while迴圈。其他情況則選用while迴圈。例如 break for i...
c 中的結構與列舉
與c 不同的是,結構應該定義在命名空間或者類裡面,成員變數叫字段,字段並且有訪問控制符,每個欄位前要加乙個下劃線 using system using system.collections.generic using system.linq using system.text using syste...