7、结构体之结构体数组

2023-05-16

结构体这块本来学着没有什么问题的,但是,有时候的学习不知道怎么的,可能是课程进度有点快,会让自己把前面的知识点与现学的联系起来,从而使自己迷惑起来。好了,先说问题:在前面的指针的学习中,我一直过于执着于——*p是以p的值为地址所指向的值,并且*p为一个具体的数值。以至于在学到结构体数组时,比如:pArr为一个结构体数组,pArr[0].age等价于(*pArr).age,我一时脑回路不够用了,困惑于*p是一个值,却忘记了结构指针变量一般形式为:

struct 结构体名 *结构体指针变量名,struct student *pArr = &stu; //假设事先定义了 struct student stu;

所以*pArr实则等价于结构体变量Boy,想到这里,突然明白自己纠结的(*pArr).age其实就是相当于stu.age。(注意(*pArr).age这里的括号不能省,因为"."的运算符优先于"*")有时候理解了后有一种顿悟的感觉,想及时用语言表达出来却也与心里所想有所差距。只可意会不可言传吧,23333~但是说白了也是自己没有彻底的掌握好。

总结一下结构体指针:

  1. 结构体指针就是指向结构体变量的指针;
  2. 如果一个指针变量中保存了结构体变量的首地址,那么这个指针变量就指向该结构体变量.
  3. 通过结构体指针即可访问该结构体变量,这与数组指针和函数指针的情况是相同的
  4. 结构指针变量说明的一般形式为:struct 结构体名 *结构体指针变量名,例如:struct student *p = &sut; //假设事先定义了 struct student stu;

结构体指针的应用,如果p指向一个结构体变量stu,则以下3种用法等价:

  • stu.成员名(如stu.num = 101)
  • (*p).成员名(如(*p).num = 101)
  • p->成员名(如p->num = 101)

注意:“->” 称为指向,运算符*p等价于结构体变量,所以对于引用结构体变量中的成员用"stu.num = 101;

(*p).num = 101"点引用,对于结构体指针去引用里面的成员用: p->num = 101;

 看下面一段代码:

#include <stdio.h>
#include <malloc.h>
struct student
{
	int age;
	float score;
	char name[100];
};

int main(void)
{
	int len;
	struct student *pArr; 
	int i;
	
	printf("请输入数组长度:\n len=");
	scanf("%d",&len);
	pArr=(struct student *)malloc(sizeof(struct student )*len); //pArr是一个结构体指针变量,malloc函数默认取第一个字节的地址,并将其地址赋值给pArr
	
	for(i=0;i<len;i++)
	{
		printf("请输入第%d个学生的个人信息:\n",i+1);
	 	printf("age=");
		scanf("%d",&pArr[i].age);
		printf("score=");
		scanf("%f",&(*(pArr+i)).score);
		printf("name=");
		scanf("%s",(pArr+i)->name); //不需要加“&”,因为pArr[i].name为int*类型 
		printf("age=%d,score=%f,name=%s\n",pArr[i].age,pArr[i].score,pArr[i].name);
	}
	return 0;
}

在上面的代码中, &pArr[i].age等价于&(*(pArr+i)).age等价于&(pArr+i)->age,三者在scanf函数中可以互换使用。

 

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

7、结构体之结构体数组 的相关文章

  • Tesseract 3.02中文字库训练

    下载chi sim traindata字库 下载tesseract ocr setup 3 02 02 exe 下载地址 xff1a http code google com p tesseract ocr downloads list 下
  • Windows下使用pip安装包 出错 TLS/SSL

    Windows下使用pip安装包的时候出现如下问题 xff1a WARNING pip is configured with locations that require TLS SSL however the ssl module in
  • C++进阶(七)-模板与群体数据8

    选择排序 选择排序的基本思想 每次从待排序序列中选择一个关键字最小的元素 xff0c xff08 当需要按关键字升序排列时 xff09 xff0c 顺序排在已排序序列的最后 xff0c 直至全部排完 例9 12 简单选择排序函数模板 tem
  • Ubuntu 20.04 WARNING笔记(长期更新,欢迎交流)

    记录使用Ubuntu 20 04过程的报错 以及解决 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61
  • 循环嵌套例题

    循环嵌套例题 1 例题1 span class token comment 代码 span span class token keyword for span span class token punctuation span span c
  • java实现学生信息管理(对象数组实现)

    java实现学生信息管理 xff08 对象数组实现 xff09 1 例题 实体类 学生类 id 姓名 xff0c 年龄 xff0c 性别 xff0c 成绩 需要使用数组保存学生信息 Student allStu 需要完成的方法 1 根据学生
  • java基础语法思维导图

    java从入门到放弃 简单总结之前的
  • 学生管理系统2.0 (可对学生数组扩容)

    学生管理系统2 0 可对学生数组扩容 1 用户可初始化数组长度 xff0c 不够用时可以扩充数组容量 尝试完成以下功能 实体类 学生类 id 姓名 xff0c 年龄 xff0c 性别 xff0c 成绩 需要使用数组保存学生信息 Studen
  • LinkedList和Set

    LinkedList和Set 1 LinkedList 1 1 LinkedList概述 底层存储数据是一个双向链表结构 自行车链子 就是一个生活中链表结构 xff0c 环环相扣 xff0c 替换 xff0c 拆除非常方便 1 2 Link
  • shiro与springboot整合

    Shiro 与 SpringBoot 的整合 1 创建SpringBoot工程 xff0c 导入依赖 span class token generics function span class token punctuation lt sp
  • Vue

    Author Thor Version 9 0 1 文章目录 一 Vue简介1 1 简介1 2 MVVM 模式的实现者 双向数据绑定模式1 3 其它 MVVM 实现者1 4 为什么要使用 Vue js1 5 Vue js 的两大核心要素1
  • android AudioRecord 音频录制 噪音消除

    android AudioRecord 音频录制 噪音消除 因为公司APP做适配 xff0c 一些低端机的噪音比较严重 xff0c 所以再一些低端机上做了简单除噪音功能 xff0c 1 xff0c 由于APP使用场景的限制 xff0c 所以
  • springboot 常用注解

    springboot 常用注解 在spring boot中 xff0c 摒弃了spring以往项目中大量繁琐的配置 xff0c 通过自身默认配置 xff0c 极大的降低了项目搭建的复杂度 在spring boot中 xff0c 大量注解的使
  • X86架构基本汇编指令详解

    文章目录 汇编指令伪指令1 MODEL2 STACK3 ENDP4 END 汇编指令1 MOV xff1a 将源操作数复制到目的操作数2 MOVZX 和 MOVSX3 XCHG 交换两个操作数内容4 INC 和 DEC5 ADD 和 SUB
  • 详解 C++ 对象模型

    文章目录 何为 C 43 43 对象模型 xff1f 基本 C 43 43 对象模型C 43 43 对象模型中加入单继承1 无重写的单继承2 有重写的单继承 C 43 43 对象模型中加入多继承C 43 43 对象模型中加入虚继承1 简单虚
  • Ubuntu 扩大/home磁盘分区

    在删除或重命名home目录之前 xff0c 千万确保你可以使用root账户 xff01 xff01 xff01 sudo 无用 xff01 xff01 xff01 根目录一共212G xff0c 已经使用了80 了 xff0c 其中130G
  • 正则表达式学习的个人小结

    正则表达式是对字符串的一种操作 xff0c 运用到JS中可以帮助我们去寻找符合要求的字符串 表单验证 http xff1a regexper com xff08 这个网站可以把正则表达式输入进去然后用图形显示出来 xff0c 因为是国外的网
  • ROS学习 一、Debian10安装ROS Noetic,解决rosdep update失败问题(更新一个可修改位置)

    目录 前言ROS安装1 添加ROS的apt源和key xff08 中科大源 xff09 2 apt安装ros noetic核心组件3 配置ROS的bash环境4 安装其他常用ROS依赖项5 解决python3 rosdep安装中出现的ros
  • windows动态链接库的使用,隐式调用(静态链接)和显示调用(动态链接)

    一 xff0c 动态链接库项目创建 dll工程内部架构 用VS2019创建动态链接库dll工程 初始会有如下几个文件 xff1a pch h和pch cpp与动态链接库功能无关 是用来保存多个文件时共同引用的头文件 xff0c 函数 xff
  • 在wsl2中安装CUDA

    1 先根据我之前的教程把wsl1升级到wsl2 wsl1升级到wsl2 夕阳之后的黑夜的博客 CSDN博客 2 打开Ubuntu xff0c 输入 uname r 确定内核 xff0c 安装CUDA需要内核 4 19 121 或更高 3 在

随机推荐

  • import torch 报错没有找到torch_python.dll

    conda install c anaconda intel openmp 运行上述代码就成功了
  • 在wsl2(Ubuntu20.04)中安装cudnn

    可以看cudnn的官方安装文档 xff1a 安装指南 NVIDIA 深度学习 cuDNN 文档 1 根据之前安装的cuda版本来下载安装对应的cudnn版本 cuDNN Archive NVIDIA Developer 2 比如我的cuda
  • 解决android opengl glReadPixels 慢的问题 三

    解决android opengl glReadPixels 慢的问题 三 使用2个pbo效率提上去了 xff0c 但是我手机分辨率是720p 或者1080p xff0c 我们手机相机使用一般是480x640 xff0c 这样通过gpu渲染到
  • 常用的损失函数

    pytorch的源码 xff1a torch nn PyTorch 1 11 0 documentation jittor的源码 xff1a jittor nn Jittor 1 3 2 6 文档 tsinghua edu cn paddl
  • Command ‘[‘where‘, ‘cl‘]‘ returned non-zero exit status 1.

    在环境变量中Path 那一项中添加两个路径 xff1a 在环境变量中新建一个LIB 变量 xff0c 并添加三个路径 xff08 记得加分号 xff09 xff1a 在环境变量中新建一个INCLUDE 变量 xff0c 并添加两个路径 xf
  • 尝试DCGAN+Self Attention

    先看一下DCGAN的G模型 xff1a 再看一下Self Attention的网络结构 xff1a 话不多说 xff0c 上代码 xff1a G D的model文件如下 xff1a import torch import torch nn
  • 2022基于GAN的去雾去雨论文

    目录 去雨CVPR2022 xff1a 使用双重对比学习的不成对深度图像去雨 去雨CVPR2021 xff1a 闭环 xff1a 通过解开图像转换生成和去除联合雨 去雨CVPR2021 xff1a 从雨水产生到雨水清除 去雾CVPR2020
  • Single image dehazing for a variety of hazescenarios using back projected pyramid network

    论文名 xff1a Single image dehazing for a variety of haze scenarios using back projected pyramid network 基于反投影金字塔网络的多雾场景单幅图像
  • Yolov7论文详解

    论文地址 xff1a https arxiv org pdf 2207 02696 pdf https arxiv org pdf 2207 02696 pdf 项目地址 xff1a WongKinYiu yolov7 Implementa
  • python logging 配置 输出 测试 根据时间生成日志文件,每天一个日志文件

    链接 https www cnblogs com xianyulouie p 11041777 html 链接 https www cnblogs com nancyzhu p 8551506 html 使用config惊醒logging配
  • 201809-3-元素选择器

    试题编号 xff1a 201809 3 试题名称 xff1a 元素选择器 时间限制 xff1a 1 0s 内存限制 xff1a 256 0MB 问题描述 xff1a import java util public class Main pu
  • VTK三维重建面绘制算法之MC表面重建

    面绘制 面绘制算法是基于表面实现的一种三维重建算法 该类算法实现的响应速度快 xff0c 对于一些实时的交互操作中不存在卡顿问题 xff0c 在日常使用中有助于提高处理效率 xff0c 但该算法在细节特征上的重建效果是不如体绘制方法 基于算
  • git clone 换源 / GitHub 国内镜像

    由于国内政策原因 xff0c 访问 GitHub 会被限制速度 xff0c 在 clone GitHub 上的代码时很容易出现连接超时的情况 xff0c 给无法翻墙的同学造成了很多困扰 xff0c 本博客旨在提供有效的国内镜像 xff0c
  • 安卓与串口通信-实践篇

    前言 在上一篇文章中我们讲解了关于串口的基础知识 xff0c 没有看过的同学推荐先看一下 xff0c 否则你可能会不太理解这篇文章所述的某些内容 这篇文章我们将讲解安卓端的串口通信实践 xff0c 即如何使用串口通信实现安卓设备与其他设备例
  • STM32复习之路——按键控制流水灯中断

    stm32复习之路1 STM32性能与结构 这里介绍的是STM32F103VET6 价格便宜 xff0c 实用性强 xff0c 其中的V为100引脚 xff0c E表示512K的FLASH xff0c T表示封装形式为LQFP xff0c
  • NXP LPC1768最小系统板Keil开发环境流程演示

    关键字 xff1a NXP LPC1768 最小系统 Keil MDK 开发环境 J Link 仿真器 概述 xff1a 以 MDK4 74版本配合 J Link 仿真器为例演示一下最小系统板的调试过程 首先运行 J Link Comman
  • ubuntu 下查看conda镜像源配置文件并修改

    查看源 xff1a conda config show sources root condarc为配置文件所在位置 xff0c 可以对其进行备份 cp condarc condarc bkp 然后修改 ls a vim condarc添加各
  • vscode+cmake配置普通c++项目

    目录 写在前面代码命令行编译与运行vscode配置编译与调试调试参考 写在前面 1 本文内容 vscode 43 cmake配置普通c 43 43 项目 2 平台 ubuntu vscode 3 转载请注明出处 xff1a https bl
  • Vscode 使用Remote-SSH 连接到虚拟机ubuntu18.04(以及遇到的错误和解决办法)

    vscode版本 xff1a 1 40 0 ubuntu xff1a 18 04 一 vscode安装remote ssh插件 二 设置要连接的主机IP地址和用户名 1 Crtl 43 P呼出命令栏 xff0c 输入 gt Remote S
  • 7、结构体之结构体数组

    结构体这块本来学着没有什么问题的 xff0c 但是 xff0c 有时候的学习不知道怎么的 xff0c 可能是课程进度有点快 xff0c 会让自己把前面的知识点与现学的联系起来 xff0c 从而使自己迷惑起来 好了 xff0c 先说问题 xf