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

目录

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

指向结构体变量的指针:

创建:

应用:

注意事项:

指向结构体数组的指针

创建:

应用:

注意:

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

注意:

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


雨过终有天晴,不是吗

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

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

【小白都爱的指针入门理解 】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.mzph.cn/news/227118.shtml

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

相关文章

eNSP小实验---(简单混合)

实验目的&#xff1a;实现vlan10 vlan20 172网段用户互访 1.拓扑图 2.配置 PC1 其它同理 SW4 <Huawei> <Huawei>u t m Info: Current terminal monitor is off. <Huawei>sys <Huawei>sys Enter system view, return user view with CtrlZ. [Hua…

K8s(九)—volume.md

目录 volumeconfigMap介绍官网例子基于文件生成 ConfigMap使用 ConfigMap 数据定义容器环境变量使用单个 ConfigMap 中的数据定义容器环境变量 EmptyDirhostPathhostPath 配置示例 nfspersistentVolumeClaim volume https://kubernetes.io/zh-cn/docs/concepts/storage/volume…

深度学习小白学习路线规划

作为深度学习的初学者&#xff0c;以下是一个建议的学习路线&#xff0c;可以帮助你逐步掌握图像分类、目标检测与跟踪、实例分割和姿态估计&#xff1a; 掌握这些&#xff0c;计算机视觉算是入门了&#xff01; 1. 基础知识&#xff1a; 学习Python编程语言&#xff0c;它是…

当在VMware Workstation Pro 中查询不到ens33网卡的IP

在学习中我们经常要去查询ens33的IP&#xff0c;但是有时候会查询不到&#xff0c;今天就遇到了这样的问题并且找到了解决方法 记录一下 ip a 查询不到IP 显示代码为 ens33: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000 link/ether …

day18 根据一棵树的中序遍历与后序遍历构造二叉树

第一步&#xff1a;如果数组大小为零的话&#xff0c;说明是空节点了 第二步&#xff1a;如果不为空&#xff0c;那么取后序数组最后一个元素作为节点元素&#xff0c;找到根节点 第三步&#xff1a;找到后序数组最后一个元素在中序数组的位置&#xff0c;作为切割点 第四步…

[论文笔记] GAMMA: A Graph Pattern Mining Framework for Large Graphs on GPU

GAMMA: A Graph Pattern Mining Framework for Large Graphs on GPU GAMMA: 基于 GPU 的针对大型图的图模式挖掘框架 [Paper] [Code] ICDE’23 摘要 提出了一个基于 GPU 的核外(out-of-core) 图模式挖掘框架(Graph Pattern Mining, GPM) GAMMA, 充分利用主机内存来处理大型图…

〖大前端 - 基础入门三大核心之JS篇(55)〗- 内置对象

说明&#xff1a;该文属于 大前端全栈架构白宝书专栏&#xff0c;目前阶段免费&#xff0c;如需要项目实战或者是体系化资源&#xff0c;文末名片加V&#xff01;作者&#xff1a;哈哥撩编程&#xff0c;十余年工作经验, 从事过全栈研发、产品经理等工作&#xff0c;目前在公司…

如何禁止孩子在电脑中浏览某些网页?

在使用电脑的过程中&#xff0c;我们会使用浏览器来查看网页。而在孩子使用电脑的过程中&#xff0c;有些网页并不适合孩子查看。因此&#xff0c;我们需要禁止孩子浏览不健康的网页。那么&#xff0c;该如何禁止孩子在电脑中浏览某些网页呢&#xff1f; 定时关机3000简介 定时…

LeetCode231. Power of Two

文章目录 一、题目二、题解 一、题目 Given an integer n, return true if it is a power of two. Otherwise, return false. An integer n is a power of two, if there exists an integer x such that n 2x. Example 1: Input: n 1 Output: true Explanation: 20 1 Ex…

QML 自定义进度条组件开发

一、效果预览 二、介绍&#xff1a; 自定义的QML 屏幕亮度拖动进度条组件CusProgressBar 可跟鼠标移动 更改进度条样式 三、代码 import QtQuick 2.12 import QtQuick.Controls 2.12 import QtQuick.Controls.Material 2.12/***author:Zwj*csdn:来份煎蛋吧*date:2023/12/16*…

c/c++中 qsort 与 bsearch 算法的使用

------------------------------------------------------------ author: hjjdebug date: 2023年 12月 13日 星期三 17:30:41 CST descriptor: qsort & bsearch 算法的使用 ------------------------------------------------------------ qsort 用来排序,bsearch用来搜索…

2k小权值和

package tgb.第二章;import java.util.Arrays; import java.util.HashMap; import java.util.Map; import java.util.Scanner;public class okt2k小权值和 {static int N(int) (2e57); // static Map<Integer, Integer> S new HashMap<Integer, Integer>() ;stat…

复盘理解/实验报告梳理 数据结构PTA实验二

一、列车厢调度 感觉这道题的题干有点难以读懂&#xff0c;或是有些地方介绍的比较含蓄。 先设置两个字符串&#xff0c;来接收进道顺序与出道顺序&#xff0c;题目的内容和那个知道入栈顺序求出栈顺序比较像。 从头循环遍历&#xff0c;检查配对&#xff0c;不配对的就入栈&am…

如何禁止服务器自动休眠

如何禁止服务器自动休眠 有时候服务器自己休眠&#xff0c;导致系统web站点无法访问&#xff0c;下面是解决办法&#xff01; 禁止服务器自动进入休眠状态的具体方法可能会因使用的Linux发行版而有所不同。以下是一些通用的方法&#xff0c;你可以根据你的系统选择适用的&#…

python之画动态图 gif效果图

import pandas as pd import matplotlib import matplotlib.pyplot as plt import os# set up matplotlib is_ipython inline in matplotlib.get_backend() if is_ipython:from IPython import displayplt.ion()def find_csv_files(directory):csv_files [] # 用于存储找到的…

【机器学习】044_Kaggle房价预测(机器学习模型实战)

参考自《动手学深度学习》中“Kaggle比赛实战&#xff1a;预测房价”一节 一、数据准备 首先从网站上下载要获取的房价数据。 DATA_HUB是一个字典&#xff0c;用来将数据集名称的字符串和数据集相关的二元组一一对应。 二元组包含两个值&#xff1a;数据集的URL和用来验证文…

python实现最小二叉堆---最小堆结构

#来源于MOOC学习以及数据结构与算法分析# 在我们学习最小二叉堆代码实现之前&#xff0c;我们需要去了解一下&#xff0c;什么是最小二叉堆&#xff08;也有最大二叉堆&#xff0c;也叫最大堆&#xff09;。 也就是说什么是二叉堆&#xff1f;&#xff1f;&#xff1f;&#…

HiveSql语法优化三 :join优化

前面提到过&#xff1a;Hive拥有多种join算法&#xff0c;包括Common Join&#xff0c;Map Join&#xff0c;Bucket Map Join&#xff0c;Sort Merge Buckt Map Join等&#xff1b;每种join算法都有对应的优化方案。 Map Join 在优化阶段&#xff0c;如果能将Common Join优化为…

Excel中的INDIRECT函数用法

当在 Excel 中使用 INDIRECT 函数时&#xff0c;它可以帮助我们通过引用字符串中的单元格地址来获取对应单元格的值。这个函数非常有用&#xff0c;特别是在需要动态地引用其他单元格的情况下。下面是 INDIRECT 函数的一些用法和示例&#xff1a; 基本用法&#xff1a; INDIREC…

Linux 中的网站服务管理

目录 1.安装服务 2.启动服务 3.停止服务 4.重启服务 5.开机自启 6.案例 1.安装服务 网址服务程序 yum insatll httpd -y 查看所有服务 systemctl list-unit-files 2.启动服务 systemctl start httpd 查看服务进程&#xff0c;确认是否启动 ps -ef|grep httpd 3.停止…