可惡的C語言 列舉與結構

2021-10-24 18:48:41 字數 3624 閱讀 6502

一種使用者定義的資料型別,用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...