结构体数组与结构体指针
目录
- 结构体基础-结构体数组与结构体指针
- 1.结构体数组
- 1.1声明结构体数组
- 1.2初始化结构体数组
- 2.结构体指针
- 2.1声明结构体指针
- 2.2初始化结构体指针
- 2.3 结构体指针的优点
- 3. 用结构体指针访问结构成员
- 3.1使用括号
- 3.2使用指向运算符“->”
结构体基础-结构体数组与结构体指针
1.结构体数组
1.1声明结构体数组
一般形式如下:
struct结构体名
{成员列表;
}数组名;
举例:
struct book
{float price;int page;char title[50];char author[50];
}str[50]; 定义时声明一个大小为50的结构体数组struct book lib[100]; 声明大小为100的结构体数组
1.2初始化结构体数组
初始化的方法同前面结构体初始化。
2.结构体指针
2.1声明结构体指针
声明一个名字为lib_point的结构体指针
struct book* lib_point;
首先是关键字struct,
其次是结构体名book,
然后是间接访问运算符(*),后面跟结构体指针名。
这个语法和其他声明指针的语法是相同的。
此时,并未创建新的结构体变量,只是创建了一个空指针 lib_point,它可以指向book类型的结构体。
能不能在声明结构的时候,直接定义一个结构体指针?
struct book
{float price;int page;char title[50];char author[50];
}*str_p;
2.2初始化结构体指针
指针lib_point原则上可以指向任意的现有book类型的结构体。
如果Hero是一个book类型的结构体变量,可以有如下的写法:
struct book Hero;
lib_point = &Hero;
注意:结构体变量名与数组名的含义是不同的,结构体变量名并不是该变量的地址,因此需要在结构体变量名前加上取址运算 “&”。
当结构体指针需要指向结构体数组时,要让指针指向结构体数组的第一个元素
struct book lib[100]; 声明大小为100的结构体数组
lib_point = &lib[0];
疑问:既然lib是一个数组(结构体数组),那lib就是数组名,也就是数组的首地址,也是数组第一个元素的地址
那么
lib_point =lib;
是不是也是合法的?
是的,也是合法的。
2.3 结构体指针的优点
指向结构体的指针通常比结构体本身更容易操作
传递指针比传递结构体的效率更高
在一些用于表示数据的结构体中可以包含指向其他结构体的指针,如链表。
3. 用结构体指针访问结构成员
3.1使用括号
struct book* lib_point;
(*lib_point).page = 350;
结构体变量可以使用“.”运算符,当对结构体指针使用.运算符时,一定要使用括号,因为 . 运算符的优先级是最高的,如果不使用括号,就会先执行点运算后执行 “*” 运算
3.2使用指向运算符“->”
这是用于结构体指针的访问结构体成员的一种特殊用法
struct book* lib_point;
lib_point->page = 350;
需要注意的问题:
lib_point是结构体的地址,也是第一个成员title的地址,虽然两个地址是相同的,但是它们的类型是不同的。
结构体数组与结构体指针相关推荐
- C++结构体(结构体创建,结构体数组,结构体指针,结构体嵌套结构体,结构体做函数参数,const变量使用)
C++结构体(结构体创建,结构体数组,结构体指针,结构体嵌套结构体,结构体做函数参数,const变量使用) 目录 C++结构体(结构体创建,结构体数组,结构体指针,结构体嵌套结构体,结构体做函数参数, ...
- 【C++】结构体 - 定义和使用,结构体数组,结构体指针,结构体嵌套结构体,结构体做函数参数,结构体 const
文章目录 1. 定义和使用 2. 结构体数组 3. 结构体指针 4. 结构体嵌套结构体 5. 结构体做函数参数 6. 结构体 const 1. 定义和使用 结构体属于用户自定义的数据类型,允许用户存储 ...
- C++结构体 结构体定义和使用、结构体数组、结构体指针、结构体嵌套结构体、结构体做函数参数
C++结构体 第二章 C++结构体 1.结构体定义和使用 语法:struct 结构体名 { 结构体成员列表 }: 通过结构体创建变量的方式有三种: struct 结构体名 变量名 struct 结构体 ...
- 结构体数组和结构体链表
结构体数组和结构体链表基本操作 结构体数组 //结构体数组 #include<stdio.h> #include<stdlib.h>//结构体 struct Student{i ...
- 结构体数组]用结构数组建立一张班级成绩单,包括每个学生的学号、姓名、成绩(C语言)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 题目: [实验案例2:结构体数组] 用结构数组建立一张班级成绩单,包括每个学生的学号.姓名.成绩.用函数编程实现下列功能: 1. 输入 ...
- 【黑马程序员 C++教程从0到1入门编程】【笔记1】数据类型、运算符、程序流程结构、数组、函数、指针、结构体
黑马程序员匠心之作|C++教程从0到1入门编程,学习编程不再难 文章目录 1.C++初识 1.1 第一个c++程序 1.2 注释 1.3 变量 1.4 常量 1.5 关键字 1.6 标识符命名规则 2 ...
- C++阶段01笔记汇总【C++软件安装、C++初识、数据类型、运算符、程序流程结构、数组、函数、指针、结构体】
C++| 匠心之作 从0到1入门学编程[视频+课件+笔记+源码] 目录 C++课程安排 1 C++初识 1.1 第一个C++程序 1.1.1 创建项目 1.1.2 创建文件 1.1.3 编写代码 1. ...
- 一维数组,二维数组,三维数组,数组与指针,结构体数组,通过改变指针类型改变访问数组的方式
打印数组中的每个元素,打印每个元素的地址: #include <stdio.h> #include <stdlib.h> void main(void) { int a[ ...
- go语言json字符串解析为结构体数组,结构体指针的数组
废话不多说直接上效果图 完整代码如下 package main import ("encoding/json""fmt" ) // 结构体定义 type rob ...
最新文章
- Java线程安全 关于原子性与volatile的试验
- Matlab随笔之矩阵入门知识
- 前端开发浏览器兼容问题
- 如何在SAP云平台的Cloud Foundry环境下添加新的Service(服务)
- ssl1761-城市问题【图论,最短路,Dijkstra】
- 小课堂?小视频?小商店?
- 到无限(溪流)和超越!
- python使用sphinx自动生成文档
- 22 File Links: Hard and Symbolic
- 5条简洁的JavaScript技巧
- java int sum 0 i_【亲和数】 (Java代码)
- leetcode 21 合并两个有序链表 (python)
- 最小生成树:Kruskal算法
- 达梦数据库建表语句之create table as select 注意事项
- 六. 先有鸡还是先有蛋?--SLAM
- #51CTO学院四周年#一路前行,一路陪伴
- Keil MDK 又更新了啥子嘛?
- MATLAB强化学习实战(二) 使用并行计算训练倒立摆系统
- 武汉大学计算机学院的博士后,武汉大学经济与管理学院
- ST官网获取并生成常用PCB EDA工具的原理图库和封装库方法
热门文章
- 【三维激光扫描】第五章:基于点云数据的立面图绘制及三维建模
- SpringBoot 配置嵌入式Servlet容器(tomcat,jetty,undertow)
- BurpSuite超详细安装教程-功能概述-配置-使用教程---(附下载链接)
- JPA学习笔记1——JPA基础
- 谱归一化(Spectral Normalization)的理解
- 这又是啥?[babel-plugin-component] If you are using bothon-demand and importing all, make sure to invoke
- 【网络通信 -- SIP 电话】项目实战记录 -- SIP 服务器 OPENSIPS 搭建测试与 SIP 客户端 PJSIP 编译安装测试
- 操作系统---计算机系统概述
- android Git版本控制
- php脾组词,脾组词_脾字组词_脾的组词意思及拼音