c语言入门(十三)--结构体

一、结构体定义

声明一个结构体的格式

struct 结构体名称 {
	结构体列表
}

结构体

#include <stdio.h>
// 声明了一个类
struct student{
    int num;
    char name[20];
    char sex;
    int age;
    float score;
    char addr[30];
};
void main(){
    struct student L={
            1001,
            "LiLei",
            'M',
            18,
            90.5,
            "Beijing"
    };

    // 结构体输出,单独访问结构体内每个成员
    printf("%d %s %c %d %5.2f %s\n",L.num,L.name,L.sex,L.age,L.score,L.addr); //输出1001 LiLei M 18 90.50 Beijing
}

结构体数组

#include <stdio.h>
// 声明了一个类
struct student{
    int num;
    char name[20];
    char sex;
    int age;
    float score;
    char addr[30];
};
void main(){
    struct student sarr[3];
    for (int i = 0; i < 3; i++) {
        scanf("%d%s %c%d%f%s",&sarr[i].num,&sarr[i].name,&sarr[i].sex,&sarr[i].age,&sarr[i].score,&sarr[i].addr);
        printf("%d %s %c %d %5.1f %s\n",sarr[i].num,sarr[i].name,sarr[i].sex,sarr[i].age,sarr[i].score,sarr[i].addr);
    }
}

// 测试数据
//输入  1001 xiaoha F 25  90.5 Beijing
//输出  1001 xiaoha F 25 90.5 Beijing
//输入  1002 lihaha M 28 99.5 Beijing
//输出  1002 lihaha M 28 99.5 Beijing
//输入  1003 lilei M 23 85.5 ShiJiazhuang
//输出  1003 lilei M 23 85.5 ShiJiazhuang

二、结构体对齐

【规则】结构体的大小必须是其最大成员的整数倍
用上面的类说明 (数组不算最大成员,最大成员在int float char中找)

struct student{
    int num; //4字节
    char name[20];  //20字节
    char sex;  //1字节
    int age; //4字节
    float score; //4字节
    char addr[30]; //30字节
};
// 最大成员是4个字节

4+20+1+4+4+30=63(字节)
其中 4/4=1 20/4=5 1/4不能整除所以要"+3" 4/4=1 4/4=1 30/4不能整除所以要"+2"
在原有的63个字节上再加5个字节,所以上述结构体大小为68字节

三、结构体指针

结构体变量的指针就是该变量所站的内存端的起始地址,可以设置一个指针变量,指向结构体,该指针变量的值就是结构体变量的起始地址。指针变量也可以指向结构体的元素,快速访问结构体内成员

#include <stdio.h>
struct student{
	int num;
	char name[20];
	char sex;
}
void main(){
	struct student s={1001,"lihaha",'M'};
	struct student *p=&s;
	printf("%d %s %c\n", p->num,p->name,p->sex); // 方法一 输出 1001 lihaha M
    printf("%d %s %c\n", (*p).num,(*p).name,(*p).sex); // 方法二 输出 1001 lihaha M
}

【成员选择运算符优先级高于取值运算符优先级】优先使用方法一

四、typedef使用

在上面结构体变量使用时struct student s={}代码低效,可以使用typedef

#include <stdio.h>

typedef struct student{
    int num;
    char name[20];
    char sex;
} stu, *pstu; //取别名

void main(){
    stu s={1001,"lihaha", 'M'};
    pstu p=&s; // 等价于 stu *p=&s;
    printf("%d %s %c\n", p->num,p->name,p->sex);  //输出 1001 lihaha M
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Y_努力_strive

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值