C语言入门之自定义结构体数据struct Student { int num; char name[20]; char sex; int age; 类型

2023-11-10

用户自己建立由不同类型数据组成的组合型的数据结构,它称为结构体

例如,一个学生的学号、姓名、性别、年龄、成绩、家庭地址等项,是属于同一个学生的,因此组成一个组合数据,如student_1的变量,反映它们之间的内在联系

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

  • 定义结构体类型变量

        (1)  结构体类型与结构体变量是不同的概念,不要混同。只能对变量赋值、存取或运算,而不能对一个类型赋值、

          存取或运算。在编译时,对类型是不分配空间的,只对变量分配空间。

(2) 结构体类型中的成员名可以与程序中的变量名相同但二者不代表同一对象。

(3) 对结构体变量中的成员(即“域”),可以单独使用,它的作用与地位相当于普通变量

(4)结构体变量中的成员访问,采用 .运算符访问

  • 结构体内存分配

  • 结构体变量的初始化和引用

说明:

(1)定义结构体数组一般形式是

struct 结构体名

    {成员表列} 数组名[数组长度];

② 先声明一个结构体类型,然后再用此类型定义结构体数组:

     结构体类型  数组名[数组长度];

   如:struct Person  leader[3];

    

(2)对结构体数组初始化的形式是在定义数组的后面加上:

={初值表列};

 如: struct Person  leader[3]= {"Li",0,"Zhang",0,"Fun",0};

  • 指向结构体变量的指针

指向结构体对象的指针变量既可以指向结构体变量,也可以用来指向结构体数组中的元素。

指针变量的基类型必须与结构体变量的类型相同。例如:

   struct Student *p;

为了使用方便和直观,通常使用结构体指针访问成员使用->运算符,而不使用(*结构体指针变

).这种形式去访问成员变量。

改成->运算符访问成员变量

p->num = 10101;

strcpy(p->name,”Zhang”);

p->score = 92.5;

  • 用结构体变量和结构体变量的指针作函数参数

将一个结构体变量的值传递给另一个函数,有3个方法

(1) 用结构体变量的成员作参数。

  例如,用stu[1].numstu[2].name作函数实参,将实参值传给形参。

  1. 用法和用普通变量作实参是一样的,属于“值传递”方式。
  2. 应当注意实参与形参的类型保持一致。

例如: funA(stu[1].num);

(2) 用结构体变量作实参。

  1. 用结构体变量作实参时,将结构体变量所占的内存单元的内容全部按顺序传递给形参,形参也必须是同类型的结构体变量
  2. 在函数调用期间形参也要占用内存单元。这种传递方式在空间和时间上开销较大
  3. 在被调用函数期间改变形参(也是结构体变量)的值,不能返回主调函数
  4. 一般较少用这种方法

例如: funB(stu[1]);

(3)用指向结构体变量(或数组元素)的指针作实参,将结构体变量(或数组元素)的地址传给形参。

例如: funC(&stu[1]);

结构体内包含另一个结构体

 struct A  {                    struct B {                   

   char c;                             struct A a;

   int  *i;                               float f;

};                                    };

结构体内包含函数指针

struct TEST {

   float f;

   void (*func)(void);

}

  • 结构体位域

位域定义

成员都是按照特定长度的二进制位进行分配

struct 位域结构体名  { 位域列表};

域列表为: 类型说明符 位域名长度;

struct BitField {

unsigned char a : 2; // 第一个位域,2

unsigned char b : 4; // 第二个,4

unsigned char c : 2; // 第三个,2

}Field;

位域可以没有名字的,这时它只用来作填充或调整位置。无名的位域是不能使用

struct BitFiled_1

{

 unsigned a : 4;

 unsigned : 0; // 无名位域, 无法使用        unsigned b : 4;

 unsigned c : 4;

} Filed_1 ;

宽度为 0 的一个未命名位域强制下一位域对齐到其下一type位域的边界

struct BitFiled_1 {

unsigned a : 4; //1unsigned int

unsigned : 0; // 未命名位域

unsigned b : 4; // 从第二个unsigned int

unsigned c : 4; // 还是第二个unsigned int

 } Filed_1; // 该位域结构总共 8 Byte

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C语言入门之自定义结构体数据struct Student { int num; char name[20]; char sex; int age; 类型 的相关文章

  • JSP(机器调度问题)使用java进行数学建模并调用cplex求解

    机器调度问题 JSP问题 描述为 在给定每个工件的加工流程 每个工件使用机器的序列及每个工件每道工序的加工时间确定的情况下 安排工件的加工顺序 使得待加工的工件在机器上进行加工的最大完工时刻最小 接着上次的JSP模型 https blog

随机推荐

  • golang docker client通过ssh调用远程主机的接口

    golang通过tcp方式连接调用远程主机docker的接口 可参考 https mp csdn net mp blog creation editor 126315928 本文主要是用Go通过ssh方式连接到远程主机 调用docker接口
  • 配置chrony时间同步服务

    一 chrony简介 chrony 的优势 更快的同步 从而最大程度减少了时间和频率误差 对于并非全天 24 小时运行的虚拟计算机而言非常有用 能够更好地响应时钟频率的快速变化 对于具备不稳定时钟的虚拟机或导致时钟频率发生变化的节能技术而言
  • Linux 免费学习路线大全,你想要的都在这里啦(持续更新,欢迎收藏❤️关注点赞加评论)

    为什么学 Linux 相比于 Windows Linux 免费 开源 安全 灵活 稳定 便于开发 所以更受企业青睐 甚至 90 以上 的企业应用都是用 Linux 服务器部署的 无论是前端 后端 算法 测试 运维等计算机相关岗位的同学 都建
  • Batch Normalization详解

    Batch Normalization 原理 1 Batch Normalization的提处背景 1 1 常见的帮助收敛的方法 在深度学习中 随着网络层数的加深 模型的收敛难度会越来越大 为了让模型更好的收敛 涌现出了各种各样的调参方法
  • Java8 HashMap源码解析

    HashMap底层数据结构 HashMap底层数据结构是 数组 链 如下图 当满足以下两个条件 链表会转为红黑树 1 数组长度等于或大于64 2 链表长度等于或大于8 如果数组长度小于64 链表长度等于或大于8 不会把链表转为红黑树 而是扩
  • SpringMVC中如何使用注解的方式实现文件上传呢?

    转自 SpringMVC中如何使用注解的方式实现文件上传呢 一 form表单注意事项 上传文件所处的表单 表单必须使用以下属性 enctype multipart form data method POST 二 applicationCon
  • vue-鉴权的两种方法之路由拦截

    vue中鉴权的两种方法 常用的鉴权有两种 一种是路由拦截 一种是动态路由 路由拦截 通过vue router的beforeEach方法进行每一次路由访问的拦截 判断拦截信息中是否有鉴权要求或者权限校验 以此来实现鉴权 如果权限不够 访问的路
  • 透视Matplotlib核心功能和工具包 - Seaborn工具包

    Seaborn是基于Matplotlib构建的功能强大的可视化工具 它使多变量探索性数据分析更加容易和直观 并且增加了一些新类型的图 并且其背景样式和颜色图更加令人愉悦 它具有许多内置的统计功能 使其成为统计数据分析的首选工具 它还具有非常
  • Web学习之TypeScript

    文章目录 一 TypeScript是什么 二 TypeScript配置 三 变量声明 四 解构 五 函数 六 类Class 七 模块Module 八 总结 九 学习资料 一 TypeScript是什么 TypeScript是JavaScri
  • PTA 7-38 等边三角形面积

    PTA 7 38 等边三角形面积 数学基础对于程序设计能力而言很重要 对于等边三角形面积 请选择合适的方法计算之 输入格式 测试数据有多组 处理到文件尾 每组测试输入1个实数表示等边三角形的边长 输出格式 对于每组测试 在一行上输出等边三角
  • Ubuntu 14.04 Tab补全忽略大小写

    0 前言 当目录名以大写字母开头时 通过cd命令进入该目录就不太方便 需要切换到大写输入 如果Tab补全可以忽略大小写的话 这个问题就引刃而解 1 设置方法 1 在 目录中创建 inputrc 2 打开 inputrc 添加如下设置 set
  • 面向产品分析的内容

    声明 本文是学习GB T 42859 2023 航天产品质量问题三个面向分析方法实施要求 而整理的学习笔记 分享出来希望更多人受益 如果存在侵权请及时联系我们 1 范围 本文件规定了航天产品质量问题三个面向分析方法实施的一般要求 程序和分析
  • Pandas库基础知识(一)

    文章目录 1 数据结构 1 Series 数据结构 1 Series对象的创建 2 Series对象的属性 3 Series对象的基本操作 2 DataFrame 数据结构 1 DataFrame对象的创建 2 DataFrame对象的属性
  • scrapy-redis分布式爬虫框架详解

    scrapy redis分布式爬虫框架详解 随着互联网技术的发展与应用的普及 网络作为信息的载体 已经成为社会大众参与社会生活的一种重要信息渠道 由于互联网是开放的 每个人都可以在网络上发表信息 内容涉及各个方面 小到心情日志 大到国家大事
  • sqllab 1-6 练习

    前言 什么是sql注入 攻击者通过构造不同的sql语句来实现对数据库的操作 两个关键 参数用户可控 参数带入数据库查询 基本流程 判断注入点 判断字段数 判断回显点 查询相关内容 判断库名 gt 判断表明 gt 判断列名 gt 判断数据 搭
  • xxl-job详细使用指南

    新建任务说明 本篇文章承接上文 xxl job快速入门指南 上一次和大家简单介绍了下 xxl job 的由来以及使用方法 本篇文章将会详细介绍一些高级使用方法及特性 上文中我们在新建一个任务的时候发现有很多的选项 现在我们来详细聊一聊他们的
  • Jquery加载本地文件出现跨域错误的解决方案

    禁止跨域是浏览器的安全限制机制 会报告上述错误 但是可以通过设置来绕过这个限制 如果经常调试前端代码 可以在本机装个web容器 常见的方式 右击chrome快捷方式 选择 属性 在 快捷方式 下的 目标 中添加 allow file acc
  • HT for Web (Hightopo) 使用心得(6)- 3D场景环境配置(天空球,雾化,辉光,景深)

    在前一篇文章 Hightopo 使用心得 5 动画的实现 中 我们将一个直升机模型放到了3D场景中 同时 还利用动画实现了让该直升机围绕山体巡逻 在这篇文章中 我们将对上一篇的场景进行一些环境上的丰富与美化 让场景更真实一些 具体涉及到的知
  • 微信小程序基础入门的知识点

    微信小程序基础入门的知识点 1 窗口配置 就是在我们app json文件就是对我们微信小程序进行全局配置 它决定我们页面文件的路径 设置多个tab 1 1 pages设置页面的路径 数组的第一个就是我们小程序初始页面 文件名不需要我们写文件
  • C语言入门之自定义结构体数据struct Student { int num; char name[20]; char sex; int age; 类型

    用户自己建立由不同类型数据组成的组合型的数据结构 它称为结构体 例如 一个学生的学号 姓名 性别 年龄 成绩 家庭地址等项 是属于同一个学生的 因此组成一个组合数据 如student 1的变量 反映它们之间的内在联系 struct Stud