408学习之c语言(结构体)

C语言结构体使用方法详解

      今天给大家分享C语言中结构体的几种常见使用方法,包括基础结构体定义与初始化,结构体指针的两种访问方式,结构体数组的遍历,动态内存分配与结构体使用,typedef简化结构体类型

基础结构体定义与使用

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<string.h>;

// 定义一个学生结构体
struct student {
    char name[20];  // 姓名
    int num;        // 学号
    float score;    // 分数
};

int main()
{
    // 结构体变量初始化
    struct student s1 = {"zhangsan",10001,99.21};
    // 打印结构体成员
    printf("%s\n %d\n %.2f\n", s1.name, s1.num, s1.score);
    
    // 声明结构体变量
    struct student s2;
    // 从输入获取结构体成员值
    scanf("%s %d %f",&s2.name,&s2.num,&s2.score); //.2的格式不能用在scanf里面 
    printf("%s\n %d\n %.2f\n", s2.name, s2.num, s2.score);
    
    // 结构体数组
    struct student sarr1[3];
    scanf("%s %d %f", &sarr1[0].name, &sarr1[0].num, &sarr1[0].score);
    printf("%s\n%d\n%.2f\n", sarr1[0].name, sarr1[0].num, sarr1[0].score);
    return 0;
}

结构体指针操作

struct student {
    char name[20];  // 姓名
    int id;         // 学号
    float score;    // 分数
};

int main()
{
    struct student s1 = { "wangwu",10086,99.98 };
    // 定义结构体指针并指向s1
    struct student* ps1 = &s1;
    
    // 通过指针访问结构体成员 - 方法1
    printf("%-s  ,%-d  ,%-.2f\n", (*ps1).name, (*ps1).id, (*ps1).score);
    // 通过指针访问结构体成员 - 方法2(更常用)
    printf("%-s  ,%-d  ,%-.2f", ps1->name,ps1->id,ps1->score);
    return 0;
}

结构体数组与指针遍历

struct student {
    char name[20];  // 姓名
    int id;         // 学号
    float score;    // 分数
};

int main()
{
    // 初始化三个学生结构体
    struct student s1 = { "zhangsan",10086,88.9 };
    struct student s2 = { "lisi",10087,98.9 };
    struct student s3 = { "wangwu",10088,89.9 };
    
    // 结构体数组初始化
    struct student arr1[3] = { s1,s2,s3 };
    // 结构体指针指向数组首地址
    struct student* p = arr1;
    int i = 0;
    
    // 遍历结构体数组
    for (i = 0; i < 3; i++)
    {
        printf("%-s\n%-d\n%-.2f\n", p[i].name, p[i].id, p[i].score);
    }
    return 0;
}

动态内存分配与结构体

struct student {
    char name[20];  // 姓名
    int id;         // 学号
    float score;    // 分数
};

int main()
{
    // 声明结构体指针
    struct student* ps1;
    // 动态分配内存
    ps1 = malloc(sizeof(struct student));
    
    // 赋值操作
    strcpy(ps1->name,"wangdao");  // 字符串赋值需要使用strcpy
    ps1->id = 1235;
    ps1->score = 99.86;
    
    printf("%-s  ,%-d  ,%-.2f", ps1->name, ps1->id, ps1->score);
    return 0;
}

使用typedef简化结构体

// 使用typedef定义结构体别名
typedef struct student {
    char name[20];  // 姓名
    int id;         // 学号
    float score;    // 分数
}stu,*pstu;  // stu == struct student; pstu == struct student *; 

int main()
{
    // 使用别名声明变量
    stu s1 = { "wangwu",10081, 90.81 };
    pstu p1 = &s1;  // p1是指向stu类型的指针
    return 0;
}

// typedef也可以用于基本数据类型
typedef int INTEGER; // 将int定义为INTEGER
int main()
{
    INTEGER num = 0;  // 等同于int num = 0;
    printf("%d\n", num);
    return 0;
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值