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

C语言学习:结构体(笔记)

1、结构体类型的定义和变量的定义

用途:把不同类型的数据组合成一个整体,类似Java中的类,但不同的是,C语言的构造体中木有函数(即Java中的方法)———自定义数据类型

1.1 定义一个结构体类型的一般形式

struct [结构体名]//struct是关键字, 不能省略;结构体名为合法标识符。 { 类型标识符 成员名;//成员类型可以是基本型或构造型 类型标识符 成员名; ············ };//注意不要忘记这里的 ;

1.2 定义结构体类型变量的3种方法

1.2.1 先定义结构体类型,再定义变量名

struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; }; struct student stu1,stu2;

1.2.2 定义结构体类型同时定义结构体类型变量:

struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; }stu1,stu2;

1.2.3 直接定义结构体类型变量:

struct { int num; char name[20]; char sex; int age; float score; char addr[30]; }stu1,stu2;

说明:

结构体类型与结构体变量概念不同

类型:不分配内存; 变量:分配内存

类型:不能赋值、存取、运算; 变量:可以

结构体可嵌套

结构体成员名与程序中变量名可相同,不会混淆

例:

例 struct date { int month; int day; int year; }; struct student { int num; char name[20]; struct date birthday; }stu;

1.3 结构体变量的初始化

一般格式

结构体类型 结构体变量名={初始值表 };

方法一:

struct student { char name[10]; int age; float score[5],ave; }stu={“zhangsan”,20,78,92,83,75,69};

方法二:

例2: struct student { char name[10]; int age; float score[5],ave; }; struct student stu={“zhangsan”,20,78,92,83,75,69};

1.4 结构体变量的引用

1.4.1对结构体类型数据的整体引用

赋值运算

ANSI C允许两个相同结构的结构体变量直接赋值

例:

struct student li,zhang={"zhangsan",20,78,92,83,75,69}; li=zhang; //将zhang对象拷贝一份赋值给li /* 但li={ “li si”,19,76,56,90,69,80};是非法的 */

1.4.2 求结构体类型数据的字节数

sizeof(变量名或类型名);

1.4.3 结构体类型数据成员的引用

引用规则:结构体变量出同类型赋值外,不能整体引用,只能引用变量成员

引用方式: 结构体变量名.成员变量

stu.name = "dashan";

1.4.4 嵌套结构体中成员的引用

结构体嵌套时,逐级引用

struct student { int num; char name[20]; struct date { int month; int day; int year; }birthday; }stu1,stu2; //给出生日期的年份赋值 stu1.birthday.year = 1999;

2、结构体数组

2.1 结构体数组的定义及初始化

2.1.1结构体数组的定义,与定义结构体类型变量很类似,也有三种形式

形式一:

struct student { int num; char name[20]; char sex; int age; }; struct student stu[2];

形式二:

struct student { int num; char name[20]; char sex; int age; }stu[2];

形式三:

struct { int num; char name[20]; char sex; int age; }stu[2];

2.1.2 结构体数组的引用

结构体数组元素的引用

struct student { int num; char name[20]; char sex; int age; }str[3]={{10,”zhang san”,’,M’,20}}; str[1]=str[0];

结构体数组元素成员的引用

引用方式: 结构体数组名.成员名

struct student { int num; char name[20]; char sex; int age; }str[3]; stu[1].age++; strcpy(stu[0].name,”ZhaoDa”);

3、结构体和指针

3.1 结构体指针变量的定义

定义形式:struct 结构体名 *结构体指针名;

struct student *p; //此时指针变量*p中存放的是--结构体变量在内存的起始地址 //例: struct student { int num; char name[20]; char sex; int age; }stu; struct student *p=&stu;

3.2 结构体指针变量的引用

使用结构体指针变量引用成员形式

(*结构体指针变量名).成员名 结构体指针变量名->成员名 结构体变量名.成员名

例:

int n; int *p = &n; *p = 10; <=> n = 10;


struct student { long int num; char name[20]; char sex; float score; }stu1; struct student *p = &stu1; stu1.num=101; <=> (*p).num=101; <=> p->num=101;
http://www.jsqmd.com/news/1344682/

相关文章:

  • 数据仓库核心架构、治理与实战:从Inmon范式到湖仓一体
  • Kubernetes蓝绿发布实战:原理与电商级部署方案
  • ROBLOX零代码开发:从Avatar与Humanoid理解角色系统核心
  • 基于QClaw与本地大模型构建个性化AI健身私教Agent实战
  • 广州做耐用动物零钱包的源头厂家怎么选金铠牛箱包有限公司 - 热点品牌推荐
  • 网络安全社区氛围建设:从技术交流到行业生态的良性发展
  • Ollama本地AI助手部署指南:从安装到集成实战
  • 2026年河池房屋漏水找谁修?本地靠谱防水公司推荐,河池正规防水工程公司,可签合同,线上质保。卫生间渗漏水、楼顶渗漏水、外墙渗漏水,河池防水补漏维修避坑 - 房屋修缮
  • 盘点七款Word文档怎么转成PDF的实用工具:从标书重排到日常办公的对比实测 - 耶斯去水印
  • UE5布料模拟插件uDraper保姆级教程:从安装到高级应用
  • Electron菜单与托盘开发实战:跨平台桌面应用的核心交互
  • C++贪吃蛇项目实战:从零构建控制台游戏,掌握核心语法与游戏逻辑
  • 老旧电脑也能跑AI大模型:Qwen3.5 0.8B端侧部署实战指南
  • AI编程成本优化:多Agent协同开发中的Token管理与配置策略
  • 将 Claude Code 项目改造为 Windows 独立运行工具——以 ai-berkshire 为例
  • FModel:虚幻引擎资源解析利器,游戏Mod制作与资源提取实战指南
  • OpenAI Agents SDK实战:从聊天机器人到自动化AI助手的技术演进
  • 基于WebAssembly构建AI Agent安全沙箱:原理、实践与BoxAgnts运行时设计
  • 数据库触发器设计:构建广视角与防缩进的高效事件处理逻辑
  • Python爬虫实战:Requests+BeautifulSoup抓取豆瓣电影TOP250数据
  • 挂号网站建设:从底层架构到用户体验,揭秘医疗数字化转型的硬核逻辑
  • 显卡驱动安装失败怎么办?用软领驱动大师按这几步排查修复
  • ADC信噪比优化实战:从量化噪声到过采样与Σ-Δ转换器
  • 湘南学院考研实力深度解析:这些专业让普通本科生“逆袭”名校 - 2027品牌AI展
  • MyBatis-Plus自定义SQL实战:XML、注解与Wrapper三种方式详解
  • 基于YOLOv11的HVAC设备视觉检测实战:从数据准备到模型部署
  • 角色扮演AI项目部署指南:从大语言模型到本地WebUI与API集成
  • VibeCoding桌宠开发避坑指南:从环境搭建到手机适配全解析
  • 2026年梅州房屋漏水找谁修?本地靠谱防水公司推荐,梅州正规防水工程公司,可签合同,线上质保。卫生间渗漏水、楼顶渗漏水、外墙渗漏水,梅州防水补漏维修避坑 - 房屋修缮
  • Windows 本地文件保险箱的一个实现思路:VHDX + NTFS + BitLocker