C语言(结构和指针)

news2024/12/28 20:44:02

目录

1.声明结构指针

2.用指针访问成员

3.传递结构成员

4.传递结构的地址

5.传递结构

6.机构的其他特性

7.结构中的字符数组和字符指针

关于为什么要使用指向结构的指针。

第一,就像指向数组的指针比数组本身更容易操作一样,指向结构的指针通常比结构本身更容易操控。

第二,在一些早期的C实现中,结构不能作为参数传递给函数,但是可以传递指向结构的指针。

第三,传递指针通常更有效率。

第四,一些用于表示数据的结构中包含指向其他结构的指针

1.声明结构指针

Struct guy * him;

指针him指向任意现在的guy类型的结构。例如,如果barney是一个guy类型的结构变量

Him = &barney

和数组不同的是,结构变量名并不是结构变量的地址,所以传递地址的时候必须用上&运算符

如果结构是一个机构数组,可以用

Hime=&barney[0];

Hime+1相当于fellow[1]

2.用指针访问成员

第一种方法,用->运算符

第二种方法,用*运算符

Him->age用(*him).age

(*him)就是ycj

记得(*him)一定要加个括号,因为.运算符比*运算符的优先级高

ycj.age=him->age=(*him).age

3.传递结构成员

只要结构成员是一个具有单个值的数据类型,便可把它作为参数传递给接受特定类型的函数

add(stan.int_1,stan.int_2)

这里add的两个参数都接受int类型的值,而a_n结构相对应的int_1,int_2也都是int类型的所以正好匹配

传递成员地址同样也是可以的

4.传递结构的地址

这里记住

struct a_n * a中a是一个指针,所以在使用传入结构成员数值的时候一定要使用->运算符

 

 

5.传递结构

这里传递结构和传递结构地址唯一区别就是,传递结构,使用的数值是结构的副本,而地址则是结构的本身数值

6.机构的其他特性

1.C允许把一个机构赋值给另一个结构(成员对应类型相同)

2.函数不仅把结构本身作为参数传递,同时也能把结构作为返回值返回。

struct a_n eva(struct a_n  * a)

将返回一个struct a_n类型结构的值

struct a_n stan_2 = eva(&stan_1);

将eva返回destruct a_n类型的成员值给到stan_2;

7.结构中的字符数组和字符指针

struct names {

        char first[20];

        char first[20];

}

struct pnames{

        char * first;

        char * last;

}

struct names veep = {"y","c"};

struct pnames treas ={'h',"w"};

对于struct names类型的结构变量veep,以上字符串都存储在结构内部,结构总共要分配40字节存储姓名。然而,对于struct pnames类型的结构变量treas,以上字符串存储在编译器存储常量的地方。机构本身只能存储两个地址,在我们的系统中占16字节。struct pnames结构不用为字符串分配任何存储空间。它使用的是存储在别处的字符串。

如果字符指针这样使用

struct pnames attorney;

scanf("%s",attorney.last)对于attorney而言,scanf()把字符串放在attorney.last表示的地址上。由于这是未经初始化的变量,地址可能是任何值,因此程序可以把名放在任何地方。如果走运的话,程序不会出现问题,但是这也会为你的程序留下一个很大的隐患

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

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

相关文章

5年自动化测试,终于进字节了,年薪30w其实也并非触不可及

我的职业生涯开始和大多数测试人一样,开始接触都是纯功能界面测试,第一份测试工作就是在电商公司做功能测试,工作忙忙碌碌,每天在各种业务需求学习和点点中度过,过了好几年发现自己还只是一个功能测试工程师&#xff0…

第十二章 Ambari二次开发之集成Alluxio

1、Alluxio高可用部署 生产环境:使用具有高可用性的模式来运行Alluxio masters。 1.1、Alluxio架构 ​ Alluxio可以被分为三个部分:**masters、workers以及clients。**一个典型的设置由一个主服务器、多个备用服务器和多个worker组成。客户端用于通过S…

机器学习实战--梯度下降法进行波士顿房价预测

前言: Hello大家好,我是Dream。 今天来学习一下如何使用机器学习梯度下降法进行波士顿房价预测,这是简单的一个demo,主要展示的是一些小小的思路~ 本文目录:一、波士顿房价预测1.全部的数据可视化2.地理数据可视化3.房…

基于”PLUS模型+“生态系统服务多情景模拟预测实践

工业革命以来,社会生产力迅速提高,人类活动频繁,此外人口与日俱增对土地的需求与改造更加强烈,人-地关系日益紧张。此外,土地资源的不合理开发利用更是造成了水土流失、植被退化、水资源短缺、区域气候变化、生物多样性…

根据手机号显示其运营商信息phone.find

【小白从小学Python、C、Java】【计算机等级考试500强双证书】【Python-数据分析】根据手机号显示其运营商信息phone.find选择题以下关于python代码表述错误的一项是?from phone import PhonephonePhone()print(【执行】phone.find())resultphone.find("13366667777"…

21.操作符优先级和结合性列表,复杂表达式求值顺序

目录一、复杂表达式求值顺序1.操作符的优先级2.操作符的结合性3.操作符是否控制执行的顺序二、求值顺序三、操作符优先级和结合性列表一、复杂表达式求值顺序 复杂表达式的求值顺序由三个因素决定: 1.操作符的优先级 2.操作符的结合性 3.操作符是否控制执行的顺序 1…

【代码随想录训练营】【Day12休息】【Day13】第五章|栈与队列|239. 滑动窗口最大值|347.前 K 个高频元素|总结

239.滑动窗口最大值 题目详细:LeetCode.239 看到滑动窗口,我立马想起了双指针,利用双指针可以非常清晰地理解解题思路: 定义一个变量 max_i 用于记录窗口中的最大值的索引每次窗口滑动后 如果出去的值是最大值,那么…

ChatGPT实火,这小东西牛在哪?

ChatGPT,真的火了啊! 相信许多朋友都听说过 ChatGPT铺天盖地的赞美,但并不清楚它是个啥。 体制内让ChatGPT写材料,广告行业让ChatGPT写策划案,媒体让ChatGPT写新闻稿,程序员让ChatGPT写代码甚至还带修BUG服…

三、常用样式讲解一

文章目录一、企业站点样式实战1.1 版心1.2 reset.css1.3 index.css(首页的样式)1.4 溢出1.5 元素类型1.6 元素类型的转换1.7 行内块元素的特殊情况:img标签的特殊性一、企业站点样式实战 1.1 版心 1.2 reset.css /* reset.css用作清除一些常…

行人检测(人体检测)2:YOLOv5实现人体检测(含人体检测数据集和训练代码)

行人检测(人体检测)2:YOLOv5实现人体检测(含人体检测数据集和训练代码) 目录 行人检测(人体检测)2:YOLOv5实现人体检测(含人体检测数据集和训练代码) 1. 前言 2. 人体检测数据集说明 (1)人体检测数据集 (2&#…

什么是互联网舆情监测分析系统,TOOM舆情监测云服务有哪些内容?

舆情监测应用范围广泛,可以帮助企业了解品牌形象、产品口碑、市场竞争、消费者需求等信息,政府了解民意状况、政策反响、社会热点等信息,个人了解社会趋势、舆论氛围、公共事件等信息。同时,舆情监测分析也可以帮助相关决策者及时…

男生vs女生,谁更加适合做软件测试?

前言 随着互联网的飞速发展,软件测试行业同步兴盛起来,逐渐出现了人才的短缺,致使行业人员工资一涨再涨。 所以,越来越多的人也开始意识到软件测试行业的”高薪“属性,转身投入到相关的工作中来。 但是,…

【Spring Cloud】如何把Feign默认的HTTP客户端URLConnection更换成支持连接池的Apache HttpClient或OKHttp

本期目录前言1. Feign底层的客户端实现2. Feign性能优化思路3. 更换底层客户端1)引入依赖坐标2)配置连接池前言 本次示例代码的文件结构如下图所示。 1. Feign底层的客户端实现 Feign 发送 HTTP 请求时,底层会使用到别的客户端。下面列出…

微服务网关(四)tcp代理模块

微服务网关(四)tcp代理模块 tcp代理服务器的代理实现: 请求流程: 代理的启停方法 //并发执行 go func() {tcp_proxy_router.TcpServerRun() }()tcp_proxy_router.TcpServerStop()tcp_server 一次完整流程 tcp_server.go 首先…

JVM的垃圾回收机制

复制算法、Eden区和Survivor区 首先我们就来探索一下对于JVM堆内存中的新生代区域,是怎么进行垃圾回收的。 实际上JVM是把新生代分为三块区域的:1个Eden区,2个Survivor区。 其中Eden区占用80%的内存空间,每块Survivor各占用10%的内…

使用yolov5训练数据集笔记

准备工作 1. 安装labelimg labelimg:主要用于目标检测的目标框绘制,得到关于我们训练的边框位置、类别等数据 pip install labelimg2. 下载yolov5源码 我使用的是v7.0版本,直接下载即可,下载后解压出来 2.1 安装yolov5运行依赖包 进入…

SurfaceFlinger详解

SurfaceFlinger的定义 大多数应用在屏幕上一次显示三个层:屏幕顶部的状态栏、底部或侧面的导航栏以及应用界面。有些应用会拥有更多或更少的层(例如,默认主屏幕应用有一个单独的壁纸层,而全屏游戏可能会隐藏状态栏)。…

棱形打印--进阶2(Java)

棱形打印 问题 * *** ***** ******* ********* ******* ***** *** * * * …

centos上搭建nginx视频点播服务器(nginx+vod+lua http发送鉴权消息)

需求背景:想着搭建一个视频点播服务器,最后选择了nginxvod的方案,用lua脚本写拉流鉴权,但是环境搭建过程中又发现nginxvodlua的环境并不是很容易搭建,是nginxlua的环境,手动搭建比较麻烦,但还是…

Numpy基础与实例——人工智能基础

文章目录一、Numpy概述1、优势2、numpy历史3、Numpy的核心:多维数组4、内存中的ndarray对象4.1 元数据(metadata)4.2 实际数据二、numpy基础1、 ndarray数组2、 arange、zeros、ones、zeros_like3、ndarray对象属性的基本操作3.1 修改数组维度…