|
結構 struct 是把相關聯,又可能不同的資料型態結合成一種新的資料型態。
例如:
一個人相關的資料有姓名(char [])、年齡(int)。
這些相關資料各有不同資料型態 (字元陣列、整數)。
如果沒有使用結構把資料結合成一筆資料,那麼要記錄一個人的資料就要如下方式:
char name[11]; //姓名最長英文10個字含結尾"\0"(中文字5個字)
int age; //年齡
輸入操作方式如下:
scanf("%s",name);//輸入姓名字串
scanf("%d",age);//輸入年齡
輸出操作方式如下:
printf("%s",name);//輸出姓名字串
printf("%d",age);//輸出入年齡
若改成 struct 結構,則
struct student{
char name[11];//姓名最長英文10個字含結尾"\0"(中文字5個字)
int age;//年齡
};
main(){
struct student a;
//學生 a 的資料
//輸入操作方式如下:
scanf("%s",a.name);//輸入學生 a 的姓名字串
scanf("%d",a.age);//輸入學生 a 的年齡
//輸出操作方式如下:
printf("%s",a.name);//輸出學生 a 的姓名字串
printf("%d",a.age);//輸出學生 a 的年齡
struct 定義方式: |
struct 結構名稱{
資料型態 結構成員名稱1;
資料型態 結構成員名稱2;
..................
資料型態 結構成員名稱n;
}變數名1,變數名1,...,變數名n;
//變數宣告為 struct 者可以在此宣告
範例:
struct complex{
int x;
int y;
}a,b;
|
typedef struct 結構名稱 另一個結構名稱;
struct 結構名稱{
資料型態 結構成員名稱1;
資料型態 結構成員名稱2;
..................
資料型態 結構成員名稱n;
}變數名1,變數名1,...,變數名n;
範例:
typedef struct complex Complex;
struct complex{
int x;
int y;
}a,b;
|
typedef struct 結構名稱{
資料型態 結構成員名稱1;
資料型態 結構成員名稱2;
..................
資料型態 結構成員名稱n;
}另一個結構名稱;
範例:
typedef struct complex{
int x;
int y;
}Complex; |
struct 宣告方式: |
struct complex c; |
struct complex c;
Complex d; |
struct complex c;
Complex d; |
struct 使用方式: |
a.x=2;
b.y=3;
c.x=7; |
a.x=2;
b.y=3;
c.x=7;
d.y=-10;
|
c.x=1;
d.y=-6; |
struct 可以個別設定每一個變數所佔位元數,如下範例:
typedef struct bitset{
int w:2;
int x:3;
unsigned int y:1;
unsigned int z:2;
}Bitset;
這個 Bitset 結構,定義了 4 種資料,
w 佔用 0 - 1 (2 bits) 以 int 方式處理,範圍 -2 至 1。
x 佔用 2 - 4 (3 bits) 以 int 方式處理,範圍 -4 至 3。
y 佔用 5 (1 bits) 以 unsigned int 方式處理,範圍 0 至 1。
z 佔用 6 - 7 (3 bits) 以 unsigned int 方式處理,範圍 0 至 3。
下面程式可以結合 union 觀察變數範圍:
#include <stdio.h>
#include <stdlib.h>
typedef struct bitset{
int w:2;
int x:3;
unsigned int y:1;
unsigned int z:2;
}
Bitset;union uniSet{
char p;
Bitset k;
}a;
int main(int argc, char *argv[]) {
int i;
printf("i \ta.k.z \ta.k.y \ta.k.x \ta.k.w\n");
printf("---------------------------------------------------------------\n");
for(i=0;i<256;i++){
a.p=(char)i;
printf("i=%-d\ta.k.z=%-4d\ta.k.y=%-4d\ta.k.x=%-4d\ta.k.w=%-4d\n", i, a.k.z, a.k.y, a.k.x, a.k.w);
}
}
|