typedef struct person {int val, int val1} sperson; 來定義結構體
/* 結構體演示 */ #include <stdio.h> /* struct person { //以下是三個成員變量聲明語句 //每個成員變量代表結構體類型的一個子存儲區 //成員變量聲明語句不會分配內存, //所以不可以進行初始化 int age; float height; char name[10]; }; //結構體聲明語句 typedef struct person sperson; //給結構體類型起別名 */ typedef struct person/*這個時候可以省略結構體本身的名稱*/{ int age; float height; char name[10]; } sperson; int main() { struct person prsn = {20, 1.78f, "abc"}; //結構體變量聲明 sperson prsn1 = {0}; //結構體變量聲明語句 sperson *p_person = NULL; //結構體指針 printf("年齡是%d\n", prsn.age/*prsn的age成員變量代表的子存儲區*/); printf("身高是%g\n", prsn.height/*prsn的height成員變量代表的子存儲區*/); printf("姓名是%s\n", prsn.name/*prsn的name成員變量代表的子存儲區*/); p_person = &prsn; //結構體指針指向存儲區 printf("年齡是%d\n", p_person->age/*prsn的age成員變量代表的子存儲區*/); printf("身高是%g\n", p_person->height/*prsn的height成員變量代表的子存儲區*/); printf("姓名是%s\n", p_person->name/*prsn的name成員變量代表的子存儲區*/); prsn1 = prsn; //同類型結構體變量之間可以直接賦值 //prsn1里的數據都來自於prsn printf("年齡是%d\n", prsn1.age); printf("身高是%g\n", prsn1.height); printf("姓名是%s\n", prsn1.name); return 0; }
在一個結構體里面使用另外一個結構體
/* 結構體演示 */ #include <stdio.h> typedef struct { int row; //記錄點的行號 int col; //記錄點的列號 } pt; //記錄點位置的結構體 typedef struct { //兩個成員變量記錄相對的兩個點的位置 pt pt1; pt pt2; } rect; //記錄水平長方形位置的結構體 int main() { int area = 0; rect r = {0}; //記錄水平長方形的位置 pt mid = {0}; //記錄中心點的位置 rect *p_rect = &r; //指向r存儲區的位置 pt *p_mid = ∣ //指向mid變量存儲區的指針 # if 0 printf("請用戶輸入水平長方形的位置:"); scanf("%d%d%d%d", &(r.pt1.row), &(r.pt1.col), &(r.pt2.row), &(r.pt2.col)); //把用戶輸入的四個記錄在r的四個整數類型子存儲區里 area = (r.pt1.row - r.pt2.row)/*兩個點的行號相減得到長或者寬*/ * (r.pt1.col - r.pt2.col); /*兩個點的列號相減得到長或者寬*/ //用長乘以寬得到長方形的面積 area = area >= 0 ? area : 0 - area; mid.row = (r.pt1.row + r.pt2.row) / 2; //得到中心點的行號並記錄到mid變量的存儲區里 mid.col = (r.pt1.col + r.pt2.col) / 2; //得到中心點的列號並記錄到mid變量的存儲區里 printf("面積是%d\n", area); printf("中心點的行是%d, 中心點的列是%d\n", mid.row, mid.col); #endif printf("請用戶輸入水平長方形的位置:"); scanf("%d%d%d%d", &(p_rect->pt1.row), &(p_rect->pt1.col), &(p_rect->pt2.row), &(p_rect->pt2.col)); printf("%d\n", p_rect->pt1.row); area = (p_rect->pt1.row - p_rect->pt2.row) *(p_rect->pt1.col - p_rect->pt2.col); area = area >= 0 ? area : 0 - area; printf("面積是%d\n", area); p_mid->row = (p_rect->pt1.row + p_rect->pt2.row) / 2; p_mid->col = (p_rect->pt1.col + p_rect->pt2.col) / 2; printf("中心點的位置是(%d %d)\n", p_mid->col, p_mid->row); return 0; }
3.結構體大小演示,不足四個字節,也填充為4個字節
/* 結構體大小演示 */ #include <stdio.h> typedef struct { char buf[2]; int val; } tmp; typedef struct { char ch; char ch1; int val; } temp1; int main() { printf("sizeof(tmp)是%d\n", sizeof(tmp)); printf("sizeif(tmp)是%d\n", sizeof(temp1)); return 0; }
定義結構體的返回值
/* 結構體演示 */ #include <stdio.h> typedef struct { int row; int col; } pt; pt * read(void) { static pt p_t = {0}; printf("請輸入長和寬:"); scanf("%d%d", &p_t.row, &p_t.col); return &p_t; } void print(pt *p_pt) { printf("輸入的長是%d, 輸入的寬是%d\n", p_pt->row, p_pt->col); } int main() { pt *p_r = read(); print(p_r); return 0; }
