结构体 -- 基础知识

定义:

结构体是一种复杂的数据类型,可以用来存放一组不同类型的数据。
其中的每一个数据,称为成员。

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);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值