目录
一、引入结构体
“ . ”运算符的使用
定义一个结构体(以MPU6050为例)
struct mpu6050_data
{
short aac_x;
short aac_y;
short aac_z; //加速度传感器原始数据
short gyro_x;
short gyro_y;
short gyro_z; //陀螺仪原始数据
float pitch; //俯仰角
float roll; //翻滚角
float yaw; //偏航角 欧拉角(姿态角)
};
struct mpu6050_data OutMpu;
main函数里
int main()
{
short accel[3] = {1,2,3};
short gyro[3] = {1,2,3};
OutMpu.aac_x = accel[0]; //点运算符来访问结构体中的成员变量(域)
OutMpu.aac_y = accel[1];
OutMpu.aac_z = accel[2];
OutMpu.gyro_x = gyro[0];
OutMpu.gyro_y = gyro[1];
OutMpu.gyro_z = gyro[2];
printf("acc_x = %d\n", OutMpu.aac_x);
printf("aac_y = %d\n", OutMpu.aac_y);
printf("aac_z = %d\n", OutMpu.aac_z);
printf("gyro_x = %d\n", OutMpu.gyro_x);
printf("gyro_y = %d\n", OutMpu.gyro_y);
printf("gyro_z = %d\n", OutMpu.gyro_z);
return 0;
}
二、结构体数组
#include <stdio.h>
#include <string.h>
struct Student
{
int num;
char name[32];
char sex;
int age;
double score;
char addr[32];
};
struct Student arr[3] = {
{2,"张三",'g',17,99.5,"北京"},
{3,"李四",'M',18,89.2,"上海"},
{4,"王五",'f',19,100,"内蒙"}
};
int main()
{
int i;
int len;
len = sizeof(arr)/sizeof(arr[0]);
for(i = 0;i< len;i++){
printf("学号:%d,年龄:%d, 分数:%lf, 名字:%s, 地址:%s\n",
arr[i].num,arr[i].age,arr[i].score,arr[i].name,arr[i].addr);
}
return 0;
}
三、结构体指针
“ -> ”运算符的使用
int main()
{
int i;
int len;
struct Student *p;
p = arr;
len = sizeof(arr)/sizeof(arr[0]);
for(i = 0;i< len;i++){
printf("学号:%d,年龄:%d, 分数:%lf, 名字:%s, 地址:%s\n",
p->num,p->age,p->score,p->name,p->addr);
p++;
}
p = arr; //回归到首地址
for(i = 0;i< len;i++){
printf("学号:%d,年龄:%d, 分数:%lf, 名字:%s, 地址:%s\n",
p->num,p->age,p->score,p->name,p->addr);
p++;
}
return 0;
}
四、共用体\联合体 union
union_test.c
unionEx.c
/* 有若干个人员的数据,其中有学生和教师。学生的数据中包括:姓名、号码、性别、职业﹑班级。
教师的数据包括:姓名、号码、性别、职业、职务。要求用同一个表格来处理。 */
#include <stdio.h>
struct Person
{
char name[32];
char gender[32];
char profess;
union {
int class;
char subject[12];
}mes; //在声明的同时,定义变量,尽量少用
};
int main()
{
struct Person p[2];
int i;
for(i=0;i<2;i++){
printf("请输入职业:t代表老师,s代表学生\n");
scanf("%c",&(p[i].profess));
if(p[i].profess == 's'){
printf("请输入学生班级:\n");
scanf("%d",&(p[i].mes.class));
printf("请输入学生名字:\n");
scanf("%s",p[i].name);
printf("请输入学生性别:\n");
scanf("%s",p[i].gender);
}
else{
printf("请输入老师的科目:\n");
scanf("%s",p[i].mes.subject);
printf("请输入老师名字:\n");
scanf("%s",p[i].name);
printf("请输入老师性别:\n");
scanf("%s",p[i].gender);
}
getchar();
}
for(i=0;i<2;i++){
if(p[i].profess == 's'){
printf("学生的名字是:%s,性别:%s,班级是%d\n",p[i].name,p[i].gender,p[i].mes.class);
}
else{
printf("老师的名字是:%s,性别:%s,科目是%s\n",p[i].name,p[i].gender,p[i].mes.subject);
}
}
return 0;
}
运行结果
五、枚举类型 enum
六、typedef关键字