九 結構體 共用體與列舉 十 位運算

2021-05-27 07:53:28 字數 2454 閱讀 7951

結構體的格式:

struct 型別名

成員列表;

變數名列表;

也可以直接定義乙個結構體變數:

struct

成員列表;

變數名列表;

下面用乙個程式將結構體的使用演示:

#include

#include

struct student  //定義結構體

char name[20];

struct      //內嵌結構體,不用類名,所以說用的是變數形式的結構體

int year;

int month;

int day;

}birthday;

char ***;

int main()

struct student data[2];  //定義結構體變數

struct student *p=data;   //定義結構體指標

strcpy(p->name,"tan");  //初始化,為資料直觀,不用使用者輸入的方式

p->birthday.year=1990;

p->birthday.month=12;

p->birthday.day=29;

p->***='b';

strcpy((p+1)->name,"zhu");

(p+1)->birthday.year=1990;

(p+1)->birthday.month=10;

(p+1)->birthday.day=25;

(p+1)->***='g';

//這裡有用箭頭和用點的問題,一條原則,只要是指標就用箭頭,其他就用點來表示成員

printf("the first person is:%s %d %d %d %c\n",p->name,p->birthday.year,p->birthday.month,p->birthday.day,p->***);

printf("the second person is:%s %d %d %d %c\n",(p+1)->name,(p+1)->birthday.year,(p+1)->birthday.month,(p+1)->birthday.day,(p+1)->***);

return 0;

上面用的結構體,內嵌結構體,還有結構體類和結構體變數,結構體的定義初始化到處理使用、輸出,進行了大概的操作。至於鍊錶和順序表這一塊知識點,這裡不做展開,在資料結構中會有詳細的說明。

首先進行說明,為節約記憶體或便於對資料進行處理,c語言允許在乙個儲存單元中(先後)存放不同型別的資料,或者在該儲存單元中以某種型別存放資料,而以另外型別訪問該資料,這種儲存單元的特殊資料型別稱為共用體型別,也叫做聯合型別。

共用體用的是同乙個記憶體,因此某個時刻只能保持某乙個成員的資料,當乙個成員的資料發生改變時,其他成員的資料也發生了變化,部分或全部被覆蓋。表面上和結構體用法差不多,但是這個差別卻說出了實質上的東西。下面乙個簡單的程式的輸出就可以驗證以上觀點:

#include

union data

int a;

char b;

int main()

union data temp;

temp.a=1111;

temp.b='r';

printf("%d\n",temp.a);

printf("%d\n",temp.b);

return 0;

結構:enum 型別名 {識別符號序列};

例如:enum color;

列舉值識別符號自動賦值給他們0,1,2,3,4,5

假如enum color;

那麼yellow就是4,自動順延。

以下程式用於舉例具體的使用:(比較簡單,不寫注釋)

#include

int main()

enum dayx;

scanf("%d",&x);

switch(x)

case mon:

case tue:

case wed:

case thu:

case fri:printf("work day!\n");break;

case sat:

case sun:printf("rest day!\n");break;

default:printf("error!\n");

return 0;

使用者自定義結構體為例,相當於這麼理解,是自定義的結構體,格式如下:

typedef struct

}student;

student a,b,c;

這麼一看就知道是什麼意思了,typedef a b;相當於是把a部分用b自定義的b部分來代替,typedef int asdl;的話,asd就有等同int的功能,可以定義整型,就是這個意思,這個和巨集定義#define又有差別,而且後者是沒有分號結尾的,注意差別。

關於位運算在先前的介紹中已經提及,而且已經簡潔明瞭,不需要再介紹。

結構體 共用體與列舉

part 1 一 結構體型別與程式設計應用 學生的記錄由學號和成績組成。n名學生的資料已在主函式中放入結構體陣列stu中。編寫函式 ndminlist,實現 把分數低的學生資料放在陣列t中,函式返回分數低的學生的人數。注意 分數低的學生可能不止乙個 include const int n 5 定義結...

結構體 共用體 列舉

結構體 共用體 列舉 分析 首先宣告的結構體元素year的位址是最低的 0012ff74 而最後宣告的day的位址是最高的 0012ff7c 而我們又知道在棧中宣告變數的時候,位址是從高到低的分配的.因此,切記在結構體中宣告的變數與直接在外面宣告是不一樣的.在結構體中,最先宣告的變數放在最低位的.另...

列舉,結構體,共用體

列舉的定義 enum log level dbg,inf,war,err,fat,all,offvoid writeinfor log level level switch level case dbg printf d n dbg 上述定義的列舉型別,預設為dbg 0,inf 1,依次類推。1 列...