C 结构体和指针

C 结构体和指针

在本教程中,您将学习在C语言编程中使用指针访问结构的成员。您还将学习动态分配结构类型的内存。

C 指向结构的指针

这是创建结构指针的方法。

struct name {member1;member2;..
};int main()
{struct name *ptr, Harry;
}

在这里,ptr是一个指向struct的指针。

示例:使用指针访问成员

要使用指针访问结构的成员,我们使用->运算符。

示例

#include <stdio.h>
struct person
{int age;float weight;
};int main()
{struct person *personPtr, person1;personPtr = &person1;   printf("输入年龄: ");scanf("%d", &personPtr->age);printf("输入体重: ");scanf("%f", &personPtr->weight);printf("显示:\n");printf("年龄: %d\n", personPtr->age);printf("体重: %f", personPtr->weight);return 0;
}

输出结果

输入年龄: 25
输入体重: 55
显示:
年龄: 25
体重: 55.000000

在此示例中,使用personPtr =&person1;将person1的地址存储在personPtr指针中。

现在,您可以使用personPtr指针访问person1的成员。

顺便说说,

  • personPtr->age 等同于 (*personPtr).age
  • personPtr->weight 等同于 (*personPtr).weight

结构的动态内存分配

在继续本节之前,建议您检查C动态内存分配。

有时,您声明的结构变量的数量可能不足。您可能需要在运行时分配内存。这是您可以在C语言编程中实现此目标的方法。

示例:结构的动态内存分配

示例

#include <stdio.h>
#include <stdlib.h>
struct person {int age;float weight;char name[30];
};int main()
{struct person *ptr;int i, n;printf("输入人数: ");scanf("%d", &n);//为n个struct person分配内存ptr = (struct person*) malloc(n * sizeof(struct person));for(i = 0; i < n; ++i){printf("分别输入姓名和年龄: ");//要访问第一个struct person的成员//可以使用 ptr->name 和 ptr->age//要访问第二个struct person的成员,//使用(ptr + 1)->名称和(ptr + 1)-> agescanf("%s %d", (ptr+i)->name, &(ptr+i)->age);}printf("显示信息:\n");for(i = 0; i < n; ++i)printf("姓名: %s\t年龄: %d\n", (ptr+i)->name, (ptr+i)->age);return 0;
}

运行该程序时,输出为:

输入人数:  2
分别输入姓名和年龄:  Harry 24
分别输入姓名和年龄:  Gary 32
显示信息:
姓名: Harry	年龄: 24
姓名: Gary	年龄: 32

在上面的实例中,在用户输入n的地方创建了n个struct变量。

要为n个struct person分配内存,我们使用,

ptr = (struct person*) malloc(n * sizeof(struct person));

然后,我们使用ptr指针访问person的元素。

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

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

相关文章

解决开源项目资金问题的 8 种方法

尽管开源项目取得了诸多成功&#xff0c;但开发者们痛苦地意识到这种模式开始出现了裂痕。当事实上的主要开发者厌倦了独自承担所有工作&#xff0c;或者当不同团体开始争执不休导致项目分裂时&#xff0c;会发生什么&#xff1f;假设出现了一个bug&#xff0c;但没有人愿意去修…

NTLM 认证支持的添加与实现

我在psf/requests项目中报告了bug #932&#xff0c;并提出了一个关于支持HTTP NTLM认证的问题。这篇文章将详细介绍问题背景和解决方案。 HTTP NTLM认证是一种用于验证用户身份的协议。在某些场景下&#xff0c;用户可能需要使用NTLM认证才能访问某些网站或资源。然而&#xff…

SpringCloud 微服务全栈体系(十五)

第十一章 分布式搜索引擎 elasticsearch 五、RestClient 操作文档 为了与索引库操作分离&#xff0c;再次参加一个测试类&#xff0c;做两件事情&#xff1a; 初始化 RestHighLevelClient酒店数据在数据库&#xff0c;需要利用 IHotelService 去查询&#xff0c;所以注入这个接…

C语言第十七弹--求100中9的个数

求100中9的个数 思路&#xff1a;求9个数 就包括了个位和十位的9&#xff0c; 那么就需要分别拿到个位9和十位的9 &#xff0c;然后9的个数相加就是100中所有9个数之和。 1.获取个位 100以内一个数%10时 就会获得它的余数即个位 如果结果等于9 个数。 2.获取十位 / 10就可以…

什么是嵌套路由?如何定义嵌套路由?

嵌套路由是指在一个路由中套入另一个路由&#xff0c;实现多层路由配置的方式。具体来说&#xff0c;当一个路由需要包含另一个路由时&#xff0c;可以将这个路由配置为父路由&#xff0c;将包含的路由配置为子路由&#xff0c;从而形成一个嵌套路由。 在React中&#xff0c;可…

Linux shell编程学习笔记28:脚本调试 set命令

0 引入 在Linux Shell 脚本编程的过程中&#xff0c;编写简单功能的脚本&#xff0c;代码不多&#xff0c;一般阅读起来没什么难度&#xff0c;有问题也比较有查出原因和修正。但是当脚本要实现的功能较多&#xff0c;代码变得较为复杂时&#xff0c;阅读起来就不那么容易看明…

一道简单的积分题目

题目如下图&#xff1a; 解法1&#xff1a; 解法2&#xff1a; 解法3&#xff1a; 错误做法&#xff1a; 在 x ∈ ( 0 , ∞ ) 上有 ln ⁡ x < x &#xff0c;令 f ( x ) ln ⁡ x 1 x 2 &#xff0c; g ( x ) &#xff1d; x 1 x 2 ∴ f ( x ) < g ( x ) &#x…

Qt按钮大全续集(QCommandLinkButton和QDialogButtonBox )

## QCommandLinkButton 控件简介 QCommandLinkButton 控件中文名是“命令链接按钮”。QCommandLinkButton 继承QPushButton。CommandLinkButton 控件和 RadioButton 相似,都是用于在互斥选项中选择一项。表面上同平面按钮一样,但是 CommandLinkButton 除带有正常的按钮上的文…

SpringCloud之Feign

文章目录 前言一、Feign的介绍二、定义和使用Feign客户端1、导入依赖2、添加EnableFeignClients注解3、编写FeignClient接口4、用Feign客户端代替RestTemplate 三、自定义Feign的配置1、配置文件方式全局生效局部生效 2、java代码方式 四、Feign的性能优化连接池配置 五、Feign…

代码随想录算法训练营第六十天丨 单调栈03

84.柱状图中最大的矩形 思路 单调栈 本地单调栈的解法和接雨水的题目是遥相呼应的。 为什么这么说呢&#xff0c;42. 接雨水 (opens new window)是找每个柱子左右两边第一个大于该柱子高度的柱子&#xff0c;而本题是找每个柱子左右两边第一个小于该柱子的柱子。 这里就涉…

从入门到精通,mac电脑录屏软件使用教程!

“mac电脑怎么录屏呀&#xff0c;刚买了一台mac电脑&#xff0c;用了几个月感觉挺流畅的&#xff0c;最近因为工作原因&#xff0c;需要用到录屏功能&#xff0c;但是我不会操作&#xff0c;想问问大家有没有简单易懂的录屏教程&#xff0c;谢谢啦。” 在日常生活中&#xff0…

几个强力的nodejs库

几个强力的nodejs库 nodejs被视为许多Web开发人员的理想运行时环境。 nodejs的设计是为了在运行时中使用JavaScript编写的代码&#xff0c;它是世界上最流行的编程语言之一&#xff0c;并允许广泛的开发者社区构建服务器端应用程序。 nodejs提供了通过JavaScript库重用代码的…

FastJsonAPI

maven项目 pom.xml <dependencies><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>2.0.26</version></dependency><dependency><groupId>junit</groupId>&l…

代码随想录算法训练营第11天|● 20. 有效的括号 ● 1047. 删除字符串中的所有相邻重复项 ● 150. 逆波兰表达式求值

20. 有效的括号 简单 给定一个只包括 ‘(’&#xff0c;‘)’&#xff0c;‘{’&#xff0c;‘}’&#xff0c;‘[’&#xff0c;‘]’ 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序…

Java读写Jar

Java提供了读写jar的类库Java.util.jar&#xff0c;Java获取解析jar包的工具类如下&#xff1a; import java.io.File; import java.io.IOException; import java.net.URL; import java.net.URLClassLoader; import java.util.Enumeration; import java.util.HashMap; import …

【图像分类】【深度学习】【Pytorch版本】ResNet模型算法详解

【图像分类】【深度学习】【Pytorch版本】 ResNet模型算法详解 文章目录 【图像分类】【深度学习】【Pytorch版本】 ResNet模型算法详解前言ResNet讲解Deep residual learning framework(深度残差学习框架)残差结构(Residuals)ResNet模型结构 ResNet Pytorch代码完整代码总结 前…

【练习】检测U盘并自动复制内容到电脑的软件

软件作用&#xff1a; 有U盘插在电脑上后&#xff0c;程序会检测到U盘的路径。 自己可以提前设置一个保存复制文件的路径或者使用为默认保存的复制路径&#xff08;默认为桌面&#xff0c;可自行修改&#xff09;。 检测到U盘后程序就会把U盘的文件复制到电脑对应的…

PyTorch微调终极指南1:预训练模型调整

如今&#xff0c;在训练深度学习模型时&#xff0c;通过根据自己的数据微调预训练模型来进行迁移学习&#xff08;transfer learning&#xff09;已成为首选方法。 通过微调这些模型&#xff0c;我们可以利用他们的专业知识并使它们适应我们的特定任务&#xff0c;从而节省宝贵…

sqlserver 删除master数据库特定前缀开头的所有表的sql语句

sqlserver数据库删除指定数据库特定前缀开头的所有表的sql语句sqlserver删除数据库指定字符开头的所有表的sql语句 USE master;DECLARE TableName NVARCHAR(128); DECLARE SQL NVARCHAR(MAX);DECLARE TableCursor CURSOR FOR SELECT name FROM sys.tables WHERE name LIKE Whi…

【miniQMT实盘量化4】获取实时行情数据

前言 上篇&#xff0c;我们介绍了如何获取历史数据&#xff0c;有了历史数据&#xff0c;我们可以进行分析和回测。但&#xff0c;下一步&#xff0c;我们更需要的是实时数据&#xff0c;只有能有效的监控实时行情数据&#xff0c;才能让我们变成市场上的“千里眼&#xff0c;…