定义:
结构体是一种复杂的数据类型,可以用来存放一组不同类型的数据。
其中的每一个数据,称为成员。
struct 结构体名{
数据;
};
示例一:定义一个简单的结构体:person
struct person{
char *name;
int age;
float height;
float weight;
};
结构体是一种自定义的数据类型,就像 int、char、float 似的,本身不占用内存,只有定义了结构体变量开始,才会占用内存空间。
- 定义一个结构体变量
struct person p1; // 定义一个结构体变量
p1.name = "TOM"; // 给结构体变量的每一个成员赋值
p1.age = 18;
p1.height = 175.5;
p1.weight = 140.8;
如果想对结构体变量整体赋值,可以在定义结构体变量时,整体赋值
struct person p1 = {"TOM", 18, 175.5, 140.8};
示例二:定义一个结构体数组:p[5]
#include "stdio.h"
// 自定义结构体类型
struct person{
char *name;
int age;
float height;
float weight;
};
int main(){
// 定义结构体数组
struct person p[] = {
{"TOM", 18, 177.4, 123.4},
{"LU", 20, 173.2, 133.3},
{"HU", 25, 160.5, 99.2}
};
int len = sizeof(p)/sizeof(p[0]); // 数组长度
printf("name\tage\theight\tweight\n");
// 遍历数组
for (int i=0; i<len; i++){
printf("%s\t%d\t%.1f\t%.1f\n", p[i].name, p[i].age, p[i].height, p[i].weight);
}
return 0;
}
示例三:结构体指针
通过指针可以获取结构体成员变量
(*指针名).成员名
, 如下例所示指针名->成员名
#include "stdio.h"
// 自定义结构体类型
struct person{
char *name;
int age;
float height;
float weight;
};
int main(){
// 定义结构体变量
struct person p1 = {"TOM", 18, 177.4, 123.4};
// 定义结构体指针
struct person *p = &p1;
printf("%p\n", p); // 打印结构体变量的地址
printf("%s\n", p1.name); // 打印name
printf("%s\n", (*p).name);
printf("%s\n", p->name);
return 0;
}
示例四:结构体指针做函数参数
问题:求小组成员的平均年龄和身高超过175的人数
// 小组成员的平均年龄,身高超过175的人数
#include "stdio.h"
struct person{
char *name; // 姓名
int age; // 年龄
float height; // 身高
float weight; // 体重
};
void average(struct person *p, int len);
int main(){
// 定义结构体数组
struct person per[] = {
{"TOM", 18, 177.4, 123.4},
{"LU", 20, 173.2, 133.3},
{"HU", 24, 160.5, 99.2}
};
int len = sizeof(per)/sizeof(per[0]);
average(per, len);
return 0;
}
void average(struct person *p, int len){
int sum_age = 0, num = 0;
float average_age = 0.0;
for (int i=0; i<len; i++){
sum_age += (p+i)->age;
}
average_age = (float) sum_age/len;
printf("小组成员的平均年龄是:%.1f\n", average_age);
for (int i=0; i<len; i++){
if ((p+i)->height > 175.0){
num += 1;
}
}
printf("小组成员中,身高超过175的有%d个人\n", num);
}