目录

  • 结构体基础-结构体数组与结构体指针
    • 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的地址,虽然两个地址是相同的,但是它们的类型是不同的。

结构体数组与结构体指针相关推荐

  1. C++结构体(结构体创建,结构体数组,结构体指针,结构体嵌套结构体,结构体做函数参数,const变量使用)

    C++结构体(结构体创建,结构体数组,结构体指针,结构体嵌套结构体,结构体做函数参数,const变量使用) 目录 C++结构体(结构体创建,结构体数组,结构体指针,结构体嵌套结构体,结构体做函数参数, ...

  2. 【C++】结构体 - 定义和使用,结构体数组,结构体指针,结构体嵌套结构体,结构体做函数参数,结构体 const

    文章目录 1. 定义和使用 2. 结构体数组 3. 结构体指针 4. 结构体嵌套结构体 5. 结构体做函数参数 6. 结构体 const 1. 定义和使用 结构体属于用户自定义的数据类型,允许用户存储 ...

  3. C++结构体 结构体定义和使用、结构体数组、结构体指针、结构体嵌套结构体、结构体做函数参数

    C++结构体 第二章 C++结构体 1.结构体定义和使用 语法:struct 结构体名 { 结构体成员列表 }: 通过结构体创建变量的方式有三种: struct 结构体名 变量名 struct 结构体 ...

  4. 结构体数组和结构体链表

    结构体数组和结构体链表基本操作 结构体数组 //结构体数组 #include<stdio.h> #include<stdlib.h>//结构体 struct Student{i ...

  5. 结构体数组]用结构数组建立一张班级成绩单,包括每个学生的学号、姓名、成绩(C语言)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 题目: [实验案例2:结构体数组] 用结构数组建立一张班级成绩单,包括每个学生的学号.姓名.成绩.用函数编程实现下列功能: 1. 输入 ...

  6. 【黑马程序员 C++教程从0到1入门编程】【笔记1】数据类型、运算符、程序流程结构、数组、函数、指针、结构体

    黑马程序员匠心之作|C++教程从0到1入门编程,学习编程不再难 文章目录 1.C++初识 1.1 第一个c++程序 1.2 注释 1.3 变量 1.4 常量 1.5 关键字 1.6 标识符命名规则 2 ...

  7. C++阶段01笔记汇总【C++软件安装、C++初识、数据类型、运算符、程序流程结构、数组、函数、指针、结构体】

    C++| 匠心之作 从0到1入门学编程[视频+课件+笔记+源码] 目录 C++课程安排 1 C++初识 1.1 第一个C++程序 1.1.1 创建项目 1.1.2 创建文件 1.1.3 编写代码 1. ...

  8. 一维数组,二维数组,三维数组,数组与指针,结构体数组,通过改变指针类型改变访问数组的方式

     打印数组中的每个元素,打印每个元素的地址: #include <stdio.h> #include <stdlib.h> void main(void) { int a[ ...

  9. go语言json字符串解析为结构体数组,结构体指针的数组

    废话不多说直接上效果图 完整代码如下 package main import ("encoding/json""fmt" ) // 结构体定义 type rob ...

最新文章

  1. Java线程安全 关于原子性与volatile的试验
  2. Matlab随笔之矩阵入门知识
  3. 前端开发浏览器兼容问题
  4. 如何在SAP云平台的Cloud Foundry环境下添加新的Service(服务)
  5. ssl1761-城市问题【图论,最短路,Dijkstra】
  6. 小课堂?小视频?小商店?
  7. 到无限(溪流)和超越!
  8. python使用sphinx自动生成文档
  9. 22 File Links: Hard and Symbolic
  10. 5条简洁的JavaScript技巧
  11. java int sum 0 i_【亲和数】 (Java代码)
  12. leetcode 21 合并两个有序链表 (python)
  13. 最小生成树:Kruskal算法
  14. 达梦数据库建表语句之create table as select 注意事项
  15. 六. 先有鸡还是先有蛋?--SLAM
  16. #51CTO学院四周年#一路前行,一路陪伴
  17. Keil MDK 又更新了啥子嘛?
  18. MATLAB强化学习实战(二) 使用并行计算训练倒立摆系统
  19. 武汉大学计算机学院的博士后,武汉大学经济与管理学院
  20. ST官网获取并生成常用PCB EDA工具的原理图库和封装库方法

热门文章

  1. 【三维激光扫描】第五章:基于点云数据的立面图绘制及三维建模
  2. SpringBoot 配置嵌入式Servlet容器(tomcat,jetty,undertow)
  3. BurpSuite超详细安装教程-功能概述-配置-使用教程---(附下载链接)
  4. JPA学习笔记1——JPA基础
  5. 谱归一化(Spectral Normalization)的理解
  6. 这又是啥?[babel-plugin-component] If you are using bothon-demand and importing all, make sure to invoke
  7. 【网络通信 -- SIP 电话】项目实战记录 -- SIP 服务器 OPENSIPS 搭建测试与 SIP 客户端 PJSIP 编译安装测试
  8. 操作系统---计算机系统概述
  9. android Git版本控制
  10. php脾组词,脾组词_脾字组词_脾的组词意思及拼音