当前位置: 首页 > news >正文

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

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

基础结构体定义与使用

#define _CRT_SECURE_NO_WARNINGS 1
#include
#include
#include;
// 定义一个学生结构体
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;
}

http://www.gsyq.cn/news/8008.html

相关文章:

  • TDMQ CKafka 版客户端实战指南系列之一:生产最佳实践
  • 完整教程:MySQL并发问题解析
  • 从“被动监控”到“主动优化”:MyEMS 重构能源管理价值的路径
  • 为什么企业需要高防IP - 详解
  • 论文解读-《Graph Retrieval-Augmented Generation A Survey》 - zhang
  • AI编程问题处理与传统网页搜索对比分析
  • WPF Canvas 网格线背景样式
  • 常见开源安全工具列表
  • 天使美容 V2 微信小程序管理系统:美业数字化运营新选择
  • 接龙大师微信小程序管理系统:一站式社群信息收集与活动管理解决方案
  • YOLOv7安全评估揭示11个漏洞:RCE攻击与模型差异风险
  • 从零开始:C# 拼音首字母搜索、字符串编码、关键词高亮的原理即实现考虑
  • 【完整源码+数据集+部署教程】机器人足球场景分割环境: yolov8-seg-C2f-DCNV2
  • 信号处理相关
  • k8s系列--组件说明
  • 详细介绍:AWS WAF 防护敏感配置文件泄露完整指南
  • JUC 学习笔记
  • pytorch读书报告
  • 分布式 笔记
  • Windows Server 2019 中文版、英文版下载 (2025 年 9 月更新)
  • Windows Server 2025 中文版、英文版下载 (2025 年 9 月更新)
  • 袋鼠云跻身榜单2025中国Data+AI创新企业榜Top15,入选“2025中国隐形独角兽500强”榜单等多项荣誉
  • Optimization Theory
  • VulkanAPI细节梳理2
  • 事件总线之初步学习
  • 实用指南:域名市场中,如何确认域名的价值
  • 初步了解Neo4j
  • 思维题做题记录-1
  • 如何在极短时间内通透一个大型开源项目
  • 求 Ray Ping - Gon