【C语言 -结构体 结构体声明、定义、初始化、结构体成员访问、结构体传参】

news2024/10/6 18:25:24

C语言 - 结构体声明、定义、初始化、结构体成员访问、结构体传参

  • 一 结构体类型的声明:
    • 声明格式:
  • 二 结构体的定义并初始化
    • 2.1用结构体创建(定义)结构体变量(对象)的两种方式:
      • (1)全局结构体变量的定义
      • (2)局部结构体变量的定义
      • 结构体的成员变量可以是:
    • 2.2结构体的初始化:
      • (1)定义方式一(全局结构体变量)中,定义并且初始化:
      • (2)定义方式二(局部结构体变量)中,定义后并初始化:
  • 三 结构体成员访问:(定义并初始化后的使用)
    • 3.1 .操作符的使用:
    • 3.2 ->操作符的使用:
  • 四 结构体传参:
    • 4.1函数调用对结构体变量内容进行传值/传址打印:
      • (1)print1传递结构体变量(传值调用)
      • (2)print2传递结构体变量的地址(传址调用)
    • 4.2传值和传址的优缺点:
  • 栈:
    • 压栈出栈例子:

一 结构体类型的声明:

类比数组:

数组:一组相同类型的元素的集合

结构体:一些值(成员变量)的集合,但是值的类型可以不同(char,short int float,double…)的变量

描述复杂对象(比如学生):
在这里插入图片描述

struct Stu称之为结构体类型
用类型创建对象(对照int类型创建变量):struct Stu s;--------------->s称为对象

用类型创建一个对象(由图纸盖出房子)

声明格式:

struct 结构体名字

{

​ 成员变量列表;

};

二 结构体的定义并初始化

2.1用结构体创建(定义)结构体变量(对象)的两种方式:

(1)全局结构体变量的定义

struct 结构体名字

{

​ 结构体成员列表;

}结构体变量(对象)列表;

这里的对象(结构体变量)为全局变量

(2)局部结构体变量的定义

struct 结构体名字

{

结构体成员列表;

};

struct 结构体名字 对象名字;

这里的结构体成员变量(对象)为局部变量

结构体的成员变量可以是:

(1)标量(2)数组 (3)指针
(4)甚至其他结构体:
在这里插入图片描述

2.2结构体的初始化:

(1)定义方式一(全局结构体变量)中,定义并且初始化:

在这里插入图片描述

(2)定义方式二(局部结构体变量)中,定义后并初始化:

在这里插入图片描述

三 结构体成员访问:(定义并初始化后的使用)

两个结构体成员访问操作符:.和->

3.1 .操作符的使用:

(1)
在这里插入图片描述

(2)
在这里插入图片描述

3.2 ->操作符的使用:

&s:对结构体变量s取地址

存放到结构体指针当中去:

struct Stu* ps=&s;

ps是结构体指针的名字,struct Stu*说明ps指向的是结构体类型变量(ps是结构体类型指针):

在这里插入图片描述

等价于:

因为ps为指针,可以使用->访问操作符

在这里插入图片描述

四 结构体传参:

4.1函数调用对结构体变量内容进行传值/传址打印:

(1)print1传递结构体变量(传值调用)

在这里插入图片描述

(2)print2传递结构体变量的地址(传址调用)

在这里插入图片描述

4.2传值和传址的优缺点:

方式一传值: 传递来的数据需要在内存中开辟一块相同大小的空间用于存放数据,浪费空间(压栈过高),优点是不可修改,安全性高。

方式二传址:传来的是仅仅是结构体变量的地址(8个字节的一串十六进制数字),节省空间,效率更高;另外, 传址调用,可以改变结构体变量中的值。

因此,传参时候参数为结构体时候,首选方式二传参时传址

栈:

栈的概念:
栈,是一种数据结构:先进的后出,后进的先出

  • 压栈(从顶放):函数传参需要压栈,

  • 出栈:(从顶出):

内存分区:

堆区,栈区,静态区

任一函数的使用,都会在内存的栈区上开辟一块空间,函数结束时候,这块空间会自动释放。
在这里插入图片描述

压栈出栈例子:

在这里插入图片描述
该调用函数在栈区中的动态过程:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/418870.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

WebRTC 系列(三、点对点通话,H5、Android、iOS)

WebRTC 系列(二、本地 demo,H5、Android、iOS) 上一篇博客中,我已经展示了各端的本地 demo,大家应该知道 WebRTC 怎么用了。在本地 demo 中是用了一个 RemotePeerConnection 来模拟远端,可能理解起来还有点…

HTTP协议:当下最主流的应用层协议之一,你确定不了解一下吗?

一.HTTP协议的含义http是什么?超文本传输协议(Hyper Text Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。‘超’可以理解为除了文本之外的图片,音频和视频,和一些其他…

硬盘、文件系统相关常识

1.硬盘 以机械硬盘为例,下面是机械硬盘的外形结构。 结构图: 每个磁盘分为两个盘面,每个盘面中有很多磁道(Disk Track),每个磁道上有很多扇区(Sector),磁道上的一段一段的就是扇区。 扇区是最小的单位,…

Flutter开发日常练习-黑白主题

1.添加了白天黑夜模式 2.country_picker: ^2.0.20 城市信息框架 3.image_picker: ^0.8.53 photo_manager: ^2.3.0 相机和相册的调用 4.shared_preferences: ^2.0.8 sqflite: ^1.3.1 path: 数据异步持久化到磁盘 注:登录的时候记录一下登录状态isLogin,通过isLogin来标记是否…

OCR之论文笔记TrOCR

文章目录TrOCR: Transformer-based Optical Character Recognition with Pre-trained Models一. 简介二. TrOCR2.1. Encoder2.2 Decoder2.3 Model Initialiaztion2.4 Task Pipeline2.5 Pre-training2.6 Fine-tuning2.7 Data Augmentation三. 实验3.1 Data3.2 Settings3.2 Resul…

如何战胜AI?唯努力尔-- DSP算法的FPGA实现指南

如何战胜AI?唯努力尔! DSP算法的FPGA实现指南! 来一集番外。 而这 也是开坑的第一个算法!我们先讲案例再谈实现指南 文章目录如何战胜AI?唯努力尔! DSP算法的FPGA实现指南!观前提醒实用算法原理数学原理代码模块划分与实现FIR滤波器误差计算与系数更新模块最终代…

算法 贪心2 || 122.买卖股票的最佳时机II 55. 跳跃游戏 45.跳跃游戏II

122.买卖股票的最佳时机II 如果想到其实最终利润是可以分解的,那么本题就很容易了! 如何分解呢? 假如第0天买入,第3天卖出,那么利润为:prices[3] - prices[0]。 相当于(prices[3] - prices[2]) (prices[2…

HBuilderX 开发工具

介绍 uni-app 官方推荐使用 HBuilderX 来开发 uni-app 类型的项目。 主要好处: 模板丰富完善的智能提示一键运行 下载 HBuilderX 1、官网下载地址:https://www.dcloud.io/hbuilderx.html 2、下载正式版(根据自己电脑选) 安装…

( “树” 之 DFS) 112. 路径总和 ——【Leetcode每日一题】

112. 路径总和 给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。 叶子节点…

虚假评论检测可视化系统的实现

菜鸟一枚,大佬勿喷,主要是想分享,希望能帮到像我一样的人。 主要代码是参考:https://github.com/SoulDGXu/NLPVisualizationSystem/tree/master/frontend 他这个代码实现了词云、摘要生成等功能吧。因为我做的是虚假评论检测系统&…

星环科技自研技术,加速大数据从持久化、统一化、资产化、业务化到生态化

从2013年成立开始,星环科技就专注于大数据基础技术与企业数据业务的更好结合,同时面对中国更为复杂的数据应用场景,研发了多种更贴合国内大数据应用需求的大数据管理技术,在大数据技术领域有多项基础技术突破。星环科技在坚持技术…

尚硅谷大数据技术Zookeeper教程-笔记02【服务器动态上下线监听案例、ZooKeeper分布式锁案例、企业面试真题】

视频地址:【尚硅谷】大数据技术之Zookeeper 3.5.7版本教程_哔哩哔哩_bilibili 尚硅谷大数据技术Zookeeper教程-笔记01【Zookeeper(入门、本地安装、集群操作)】尚硅谷大数据技术Zookeeper教程-笔记02【服务器动态上下线监听案例、ZooKeeper分布式锁案例、企业面试真…

Vue3 关于setup与自定义指令

setup语法糖 最大好处就是所有声明部分皆可直接使用&#xff0c;无需return出去 注意&#xff1a;部分功能还不完善&#xff0c;如&#xff1a;name、render还需要单独加入script标签按compositionAPI方式编写 // setup 下还可以附加<script> setup语法糖独有 &…

【CocosCreator入门】CocosCreator组件 | Graphics(绘制)组件

Cocos Creator 是一款流行的游戏开发引擎&#xff0c;具有丰富的组件和工具&#xff0c;其中Graphics组件允许您在游戏中绘制2D图形和几何形状&#xff0c;并通过编写脚本来控制其外观和行为。 目录 一、组件属性 二、组件方法 三、脚本示例 一、组件属性 属性功能说明lineW…

MySQL删除数据1093错误

现象&#xff1a;在进行更新和删除操作的时候&#xff0c;条件语句里面有子查询语句&#xff0c;此时会报1093错误&#xff01; 错误日志&#xff1a;1093 - You can’t specify target table ‘t_suer_study_video’ for update in FROM clause 首先根据条件来查询 SELECT * …

动手学深度学习V2的笔记小记

自动求导 两种方式&#xff1a;正向&#xff0c;反向 内存复杂度&#xff1a;O(n) 计算复杂度&#xff1a;O(n) 线性回归 梯度下降通过不断沿着反梯度方向更新参数求解 两个重要的超参数是批量大小和学习率 小批量随机梯度下降是深度学习默认的求解算法 训练误差和泛化误差 训练…

Matlab论文插图绘制模板第85期—模值赋色的箭头图

在之前的文章中&#xff0c;分享了Matlab箭头图的绘制模板&#xff1a; 进一步&#xff0c;如果我们想对每一个箭头赋上颜色&#xff0c;以更加直观地表示其模值的大小&#xff0c;该怎么操作呢&#xff1f; 那么&#xff0c;来看一下模值赋色的箭头图的绘制模板。 先来看一下…

微短剧的春天里,抖音、快手各有所思

2023年&#xff0c;微短剧将延续爆发之势。 从今年热播的《二十九》《二见钟情》《步步为陷》《倾世小狂医》《开局一座山》《都市至尊赘婿》等作品上&#xff0c;我们看到了微短剧题材的扩展和剧情的张力。相比刚刚兴起时&#xff0c;微短剧脑洞更大、质量更优&#xff0c;还…

CC2642的GGS使用笔记

一、前言 我们了解BLE的GATT之前需要了解一些基本的概念&#xff1a; &#xff08;1&#xff09;Profile,字面意思简介、概述、形象印象、轮廓、配置文件&#xff0c;在BLE中&#xff0c;我们可能把它理解成配置文件较好&#xff0c;Profile有一些是BLE SIG规定的&#xff0c;有…

从Vue2到Vue3的差别学习升级

目录 1 从data,methods到setup 超级NB的写法 2 使用props、emit和context 使用props 使用emit 3 路由变化 4 变量初始化的变化 1 从data,methods到setup <script> export default {components:{NPagination:NPagination,},name: "MyPaging",setup(){//…