结构体基础全家桶(2)结构体指针

news2024/12/23 18:13:33

目录

指向结构体类型数据的指针:

指向结构体变量的指针:

创建:

应用:

注意事项:

指向结构体数组的指针

创建:

应用:

注意:

用结构体变量和指向结构体的指针做函数的参数

注意:

下期预告:结构体的内存对齐


雨过终有天晴,不是吗

在前面我们已经了解了普通变量指针,数组指针,函数指针。指针的合理运用可以让我们的程序运行更加高效,代码的数量得到有效的减少。这里我们来讲解结构体的指针:

如果对指针不是太了解,也可以看一下这篇关于指针的文章:

【小白都爱的指针入门理解 】http://t.csdnimg.cn/IOpzx

指向结构体类型数据的指针:

一个结构体变量的指针就是改变量所占据的内存短的起始地址。我们可以设置一个指针来指向结构体的其实位置地址,同时也可以用来指向结构中的元素。

指向结构体变量的指针:

创建:

与普通指针的创建方式一样,我们需要先声明指针的类型“struct student",接着表明这是一个指针
 
struct student {

	int age;
	char name[20];
	int num;

}student1;
int main()
{
	struct student* p1 = &student1;

	return 0;
}

应用:

我们可以通过指针来给结构体进行初始化,以及对结构体的成员值进行改变:
int main()
{
	struct student* p1 = &student1;
	(*p1).age = 100;
	(*p1).name[0] = 's';
	(*p1).num = 200;

	return 0;
}

注意事项:

  • 在对结构体成员中的数组赋值时我

    们要找到最低单位,也就是要找到数组中的单个元素,不能对数组整体赋值。
  • 因为运算优先级” .” 要大于” * “,这里的()不能省去。
  • 这里的(*p).可以用p->来代替,->为指向运算符

指向结构体数组的指针

先前我们已经介绍过,指针可以指向普通变量数组。同样指针也可以指向结构体数组,两者具有相似性。

创建:

方法与上述方法相同:
struct student {

	int age;
	char name[20];
	int num;

}arr[3] = {
	{10,"haha",100},
	{20,"lili",200},
	{30,"hehe",300}
};//定义结构体数组

int main()
{
	struct student* p = &arr;//创建


	return 0;
}

应用:

这里依旧要准寻找到最小单位的准则!
int main()
{
	struct student* p = &arr[0];//创建
	printf("%d\n", (*p).age);
	p++;
	printf("%d\n", (*p).age);

	return 0;
}

运行结果:

10
20

注意:

  • 这里&arr指向数组中第一个元素的地址。
  • 这里p++会跳过一个结构体指向下一个结构体,而不是指向原结构体下一个元素。
  • p已经被程序定义为指向struct student 类型数据的指针,它只能指向结构体类型,而不能指向结构体中的单个元素。

用结构体变量和指向结构体的指针做函数的参数

将一个结构体变量的值传参我们这里介绍两种:

1.结构体成员传参,将结构体的单个成员的值传入:

int add(int a)
{
	return 2 * a;
}
struct student {

	int age;
	char name[20];
	int num;
}student1={10,"asdf",300};
int main()
{
	int m = add(student1.age);

	return 0;
}

2.结构体地址传参:

void pff(int* p)
{
	*p = (*p) * 2;
}
int main()
{
	
	int* p = &(student1.age);
	pff(p);
	printf("%d\n",*p);
	return 0;
}

注意:

传值与传址两者的区别,传值并不会改变原本值的大小,而传址将会改变原本变量值的大小。

这里我们打印出来的值为20!

这篇文章到这里就结束了,如果感觉不够了解,可以回顾上期文章:

【结构体基础全家桶(1)创建与初始化 】http://t.csdnimg.cn/8n2kP

下期预告:结构体的内存对齐

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

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

相关文章

oracle详细安装教程(附带百度网盘资源)

一,下载安装包途径 1.官网 Unauthorized Request 2.百度网盘分析 https://pan.baidu.com/s/1n221gdTK0Fcho839oRab9g 提取码1q2w 二,安装教程 1.下载完安装包后点击 setup.exe 如果出现一下的问题,使用windows10等系统安装oracle 11g等版本的数据库…

大 O 表示法在机器学习中的重要性

一、介绍 在不断发展的机器学习领域,算法的效率至关重要。大 O 表示法成为这方面的一个关键工具,它提供了一种描述算法性能或复杂性的语言,特别是在时间和空间方面。本文探讨了 Big O 表示法在机器学习中的重要性,阐明了它在算法选…

Next.js加载异步组件 骨架屏

Next.js 中有两种处理页面加载的方式,一种是 Loading UI 一种是 Streaming。接下来我将介绍这两种的区别,以及实际的业务场景。 当我们进入某个页面时,需要获取页面数据,可能是从数据库读取也有可能是 API 服务,总之这…

【深度学习】注意力机制(六)

本文介绍一些注意力机制的实现,包括MobileVITv1/MobileVITv2/DAT/CrossFormer/MOA。 【深度学习】注意力机制(一) 【深度学习】注意力机制(二) 【深度学习】注意力机制(三) 【深度学习】注意…

【从零开始学习JVM | 第九篇】了解 常见垃圾回收器

前言: 垃圾回收器(Garbage Collector)是现代编程语言中的一项重要技术,它提供了自动内存管理的机制,极大地简化了开发人员对内存分配和释放的繁琐工作。通过垃圾回收器,我们能够更高效地利用计算机的内存资…

MetaAI发布Seamless:两秒内实现跨语言同声传译

在当今日益互联的世界中,语言差异常常成为沟通的障碍。MetaAI最新发布的语音翻译大模型Seamless,正是为打破这一障碍而生。Seamless不仅提供流畅、高效的多语言翻译功能,更在保留说话人韵律和风格方面取得突破,是AI同声传译领域的…

Python开源项目周排行 2023年第40周

Python 趋势周报,按周浏览往期 GitHub,Gitee 等最热门的Python开源项目,入选的项目主要参考GitHub Trending,部分参考了Gitee和其他。排名不分先后,都是当周相对热门的项目。 入选公式=70%GitHub Trending20%Gitee10%其他 关注微…

Tekton 构建容器镜像

Tekton 构建容器镜像 介绍如何使用 Tektonhub 官方 kaniko task 构建docker镜像,并推送到远程dockerhub镜像仓库。 kaniko task yaml文件下载地址:https://hub.tekton.dev/tekton/task/kaniko 查看kaniko task yaml内容: 点击Install&…

QQ邮箱发送工具类的实现

我们在日常开发中&#xff0c;需要实现一个对邮箱的发送&#xff0c;今天就实现邮箱的发送工具类&#xff0c;只需要一些注册邮箱之后的配置即可&#xff0c;我这边使用的是qq邮箱 0.加上依赖 <!--邮箱--><dependency><groupId>org.springframework.boot&l…

Docker单机部署OceanBase

文章目录 说明机器软硬件要求指导文档本次部署环境说明 OceanBase单机部署&#xff08;Docker&#xff09;一&#xff1a;拉取 OceanBase 数据库相关镜像二&#xff1a;启动 OceanBase 数据库实例完整启动日志展示 三&#xff1a;连接实例遇到报错&#xff1a;没有mysql客户端 …

【lesson14】MySQL表的基本查询retrieve(读取)1

文章目录 表的基本操作介绍retrieveselect列建表基本测试 where子句建表基本测试 表的基本操作介绍 CRUD : Create(创建), Retrieve(读取)&#xff0c;Update(更新)&#xff0c;Delete&#xff08;删除&#xff09; retrieve select列 建表 基本测试 插入数据 全列查询 …

GoogLeNet(pytorch)

亮点与创新&#xff1a; 1. 引入Inception基础结构 2. 引入PW维度变换卷积&#xff0c;启迪后续参数量的优化 3. 丢弃全连接层&#xff0c;使用平均池化层&#xff08;大大减少模型参数&#xff09; 4. 添加两个辅助分类器帮助训练&#xff08;避免梯度消失&#xff0c;用于…

智能电气柜环境监测系统

智能电气柜环境监控系统是一种基于传感器技术和物联网技术的智能化监控系统&#xff0c;用于对电气柜内的环境参数进行实时监测和管理。依托智慧电力运维工具-电易云&#xff0c;通过安装在电气柜内的多个传感器&#xff0c;实时采集电气柜内的温度、湿度、氧气浓度、烟雾等关键…

windows redis 允许远程访问配置

安装好windows版本的redis&#xff0c;会以服务方式启动&#xff0c;但是不能远程访问&#xff0c;这个时候需要修改配置。redis安装路径下会有2个配置文件&#xff0c;究竟需要怎么修改才能生效呢&#xff1f;看下图 这里的redis服务指定了是redis.windows-service.conf文件&…

java_web_电商项目

java_web_电商项目 1.登录界面2.注册界面3. 主界面4.分页界面5.商品详情界面6. 购物车界面7.确认订单界面8.个人中心界面9.收货地址界面10.用户信息界面11.用户余额充值界面12.后台首页13.后台商品增加14.后台用户增加15.用户管理16.源码分享1.登录页面的源码2.我们的主界面 1.…

Xml与Json格式在线转换器

具体请前往&#xff1a;在线Json转Form表单参数工具

计算机网络(四)

九、网络安全 &#xff08;一&#xff09;什么是网络安全&#xff1f; A、网络安全状况 分布式反射攻击逐渐成为拒绝攻击的重要形式 涉及重要行业和政府部门的高危漏洞事件增多。 基础应用和通用软硬件漏洞风险凸显&#xff08;“心脏出血”&#xff0c;“破壳”等&#x…

springMVC-@RequestMapping

基本介绍 RequestMapping注解可以指定控制器/处理器的某个方法的请求的url, 示例 &#xff08;结合springMVC基本原理理解&#xff09; Controller public class UserHandler {RequestMapping(value "/login")public String login() {System.out.println("登…

JOSEF约瑟 静态双位置继电器 DPR-35 DC110V柜内固定安装,板前接线

系列型号&#xff1a; DPR-20双位置继电器&#xff1b;DPR-31双位置继电器&#xff1b; DPR-32双位置继电器&#xff1b;DPR-33双位置继电器&#xff1b; DPR-34双位置继电器&#xff1b;DPR-35双位置继电器&#xff1b; DPR-11双位置继电器&#xff1b;DPR-12双位置继电器…