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; }