目录

一、结构体指针

二、结构体数组

1.结构体数组的定义

2.结构体数组的初始化

3.结构体数组的引用

4.结构体数组指针


一、结构体指针

与一般指针类似结构体也可以使用结构体指针进行引用使用。结构体指针的定义方式如下:

struct Student stu = { 1001,"Li Lei",'M',1.87 };  //定义一个Student 的结构体变量stu

struct Student *p=&stu;    //定义一个Student的结构体指针变量来指向stu

当程序中定义了一个指向结构体变量的指针,就可以通过“指针名->成员变量名”的方式访问结构体变量的成员

实例演示:

#include <stdio.h>typedef char NAME[10];
typedef double DOU;
typedef struct Student
{int num;NAME name;char sex;DOU height;}Stu;int main() {Stu stu = { 1001,"Li Lei",'M',1.87 };Stu* p = &stu;printf("学生信息:\n");printf("学号:%d\n", p->num);printf("姓名:%s\n", p->name);printf("性别:%c\n", p->sex);printf("年龄:%.2lf\n", p->height);
}

运行结果:


二、结构体数组

1.结构体数组的定义

一个结构体变量只能存储一组信息,如果要存储大量的信息,则可以定义一个结构体数组进行存储。

定义结构体数组的方式有三种:

①先定义结构体类型,后定义结构体数组

struct Student
{int num;char name[10];char sex;double height;};struct Student stus[20];

②在定义结构体类型的同时定义结构体数组

struct Student
{int num;char name[10];char sex;double height;}stus[20];

③直接定义结构体数组

struct
{int num;char name[10];char sex;double height;}stus[20];

2.结构体数组的初始化

结构体数组与一般数组类似,都通过为元素赋值的方式完成初始化。由于结构体数组中的每个元素都是一个结构体变量,因此,在为每个元素赋值时,需要将其成员的值依次放到一对大括号中。

结构体数组的初始化方式:

①先定义结构体类型,后定义并初始化结构体数组

struct Student
{int num;char name[10];char sex;double height;};struct Student stu1[3] = { {1001,"Li Lei",'M',1.78},{1002,"Li Hua",'M',1.87},{1003,"Han Mei",'W',1.65}};

②在定义结构体类型的同时定义结构体数组并初始化

struct Student
{int num;char name[10];char sex;double height;}stu1[3] = { {1001,"Li Lei",'M',1.78},{1002,"Li Hua",'M',1.87},{1003,"Han Mei",'W',1.65}};

使用这种方式初始化结构体数组时,可以不指定结构体数组的长度,系统在编译时,会自动根据初始化的值决定结构体数组的长度。

3.结构体数组的引用

结构体数组的引用是指对结构体数组元素的引用,由于每个结构体数组元素都是一个结构体变量,因此结构体数组元素的引用于结构体变量类似。

实例演示:

#include <stdio.h>struct Student
{int num;char name[10];char sex;double height;};struct Student stus[3] = { {1001,"Li Lei",'M',1.78},{1002,"Li Hua",'M',1.87},{1003,"Han Mei",'W',1.65}};int main() {for (int i = 0; i < 3; i++) {printf("学生%d的信息\n", i + 1);printf("学号:%d\n", stus[i].num);printf("姓名:%s\n", stus[i].name);printf("性别:%c\n", stus[i].sex);printf("身高:%.2lf\n", stus[i].height);printf("\n");}}

运行结果:

4.结构体数组指针

指针可以指向结构体数组,即将结构体数组的起始地址赋给指针变量,这种指针就是结构体数组指针。

实例演示:

#include <stdio.h>struct Student
{int num;char name[10];char sex;double height;};struct Student stus[3] = { {1001,"Li Lei",'M',1.78},{1002,"Li Hua",'M',1.87},{1003,"Han Mei",'W',1.65}};int main() {struct Student* p=stus ;//定义结构体数组指针p指向结构体数组stusfor (int i = 0; i < 3; i++) {printf("学生%d的信息\n", i + 1);printf("学号:%d\n", p->num);printf("姓名:%s\n", p->name);printf("性别:%c\n", p->sex);printf("身高:%.2lf\n", p->height);printf("\n");p++;}}

运行结果:

结构体数组指针从定义上看,它和结构体指针没什么区别,只不过指向的是结构体数组。

【C语言】结构体指针与结构体数组相关推荐

  1. 【RTOS训练营】课程学习方法和C语言知识(指针、结构体、函数指针、链表)和学员问题

    一.课程学习方法 因为有些学员是刚进群,所以这里再把学习方法讲一下. 1. 预习 我们会在每一节晚课之后会通知要预习的章节,学员需要按如下操作观看相关视频. 1.1 打开百问网官网 ​1.2 点击首页 ...

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

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

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

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

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

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

  5. 结构体指针和结构体变量

    文章目录 1.前言 2.内存空间上面的差别 3.访问上的差别 1.前言 今天在写题目的时候出现了一处小错误,就是由于结构体指针和结构体变量没有区分清楚,接下来谈一谈这两者的区别: 2.内存空间上面的差 ...

  6. 初识C语言#define、指针、结构体

    #define 定义常量和宏 define是一个预处理指令. 在C或C++语言源程序中允许用一个标识符来表示一个字符串,称为"宏".被定义为"宏"的标识符称为& ...

  7. c语言的结构体指针的引用,C语言中的指针、引用、数组、结构体

    指针.引用和取值 什么是指针?什么是内存地址?什么叫做指针的取值?指针是一个存储计算机内存地址的变量.在这份教程里"引用"表示计算机内存地址.从指针指向的内存读取数据称作指针的取值 ...

  8. C语言结构体指针与结构体变量作形参的区别

    区别 结构体变量 结构体变量作为函数参数,传递的是结构体变量本身,是一种值传递 形参结构体变量成员值的改变不影响对应的实参构体变量成员值的改变 结构体指针 结构体指针作为函数参数,传递的是指向结构体变 ...

  9. c语言嵌套结构体数组,第22节 C语言结构体之结构体嵌套、结构体指针与结构体数组的代码实现...

    结构体 #include //第一步 struct Student { //学号 int no; //姓名 char name[20]; //性别 char sex[10]; //成绩 double ...

最新文章

  1. Swift中的选项集合
  2. keil for 51 汉字显示问题
  3. linux分区dh满了,python 在linux下能过top,和dh命令获得cpu,内存,以及硬盘信息 - Sprite...
  4. nginx看最大并发量_Nginx高并发配置思路(轻松应对1万并发量)
  5. 精通Android3笔记--第四章
  6. hibernate批量查询_使用Hibernate批量获取
  7. oracle中order by 2,关于oracle中ROWNUM和ORDER BY的问题(2)
  8. Python中的函数概述
  9. 【入门4】数组 (今天刷洛谷了嘛)
  10. AjaxPro无刷新选择列表框/下拉框[方便|稳定]
  11. bat如何执行完上一条命令_一条更新语句是如何执行的?
  12. Hyperledger fabric通道(Channel)的新建、管理、节点如何加入channel
  13. LINUX搭建EtherCalc环境
  14. Julia : array[ ] 与几种过滤条件
  15. wooyun镜像容器逆向分析
  16. oCPC实践录 | 好难理解的oCPC成本控制算法(1)
  17. centos7安装netspeeder教程
  18. 计算机应用中双绞线细铜线几根,《计算机应用基础_在线作业_E100.doc
  19. java 社会统一信用代码分解,获取登记管理部门代码、机构类别代码、登记管理机关行政区划码、 主体标识码、校验码
  20. HLS ARRAY_PARTITION

热门文章

  1. jsp的内置对象有哪些,四大作用域有哪些??
  2. UTC、CST、GMT等时区详解
  3. 用户模块--------用户登录
  4. html+css实现轮播图
  5. PCIe系列第三讲、事务层通用 TLP 头结构分析
  6. 浅谈Android Contacts数据库phone_lookup表的设计
  7. [洛谷]P1010 [NOIP1998 普及组] 幂次方
  8. UVA10635--Prince and Princess
  9. 今天看了ning的介绍,很有意思
  10. 关于脚本录制和回放终端会话(script、scriptreplay)使用