指针及其应用4——结构体指针
结构体指针的定义与使用
当一个指针变量用来指向一个结构体变量时,称之为结构体指针变量。 结构体指针变量的值是所指向的结构体变量的起始地址。通过结构体指针即可访问该结构体变量,这与数组指针和函数指针的情况是相同的。
结构体指针变量定义的一般形式: 结构体名 *结构体指针变量名
当然也可以在定义结构体的同时定义这个结构体指针变量。
例如:(定义一个结构体(类型为自己定义的 student)指针变量 p)
struct student{char name[20];char sex;float score;} *p;
也可写成
struct student {char name[20];char sex;float score;};
student *p;
与前面讨论的各类指针变量相同,结构体指针变量也必须要赋值后才能使用。
赋值是把结构体变量的首地址赋予该指针变量,不能把结构名赋予该指针变量。
例如:如果 p 是被定义为 student 类型的结构体指针变量,boy 是被定义为 student 类型的结构体变量,则:p=&boy 是正确的,而 p=&student 是错误的。
引用结构体指针变量指向的结构体变量的成员的方法如下:
①、指针名->成员名
②、(*指针名).成员名
例如: (*p).score 与 p->score 是等价的。
【例 14】结构体指针运用举例。
#include<cstdio>
using namespace std;
struct student {char name[20];char sex;int score;
} s[3]={{"xiaoming",'f',356},{"xiaoliang",'f',350},{"xiaohong",'m',0}};
int main()
{student *p;printf("Name Sex Score\n");for (p=s; p<s+3; p++)printf("%-9s%3c%7d\n",p->name,p->sex,p->score);return 0;}
输出:
Name Sex Score
xiaoming f 356
xiaoliang f 350
xiaohong m 0
【说明】 这里 p++起到移动指针的作用,随着 p 的变化,输出数组不同元素内容。
自引用结构
在一个结构体内部包含一个类型为该结构体本身的成员是否合法呢?
struct stu {char name[20]; int age,score;stu p;};
这种类型的自引用是非法的,因为成员 p 是另一个完整的结构,其内部还将包含它自己的成员 p。这第 2 个成员又是一个完整的结构,它还将包含自己的成员 p……这样重复下 去就永无止境了。这有点像永远不会终止的递归程序。
但下面这个程序是合法的:
struct stu {char name[20];int age,score;stu *p;};
这个声明和前面那个声明的区别在于 p 现在是一个指针而不是结构体。编译器在结构体的长度确定之前就已经知道指针的长度,所以这种类型的自引用是合法的。
当一个结构体中有一个或是多个成员是指针,它们所指向的类型就是本结构体类型时, 通常这种结构体称为“引用自身的结构体”,即“自引用结构”。这种自引用结构是实现其他一 些结构的基础。
自引用结构在动态数据结构中有重要作用,甚至可以说,自引用结构是 C/C++语言实 现动态数据结构的基石。包括动态的链表、堆、栈、树,无不是自引用结构的具体实现。
例如,下面的定义就可以在实际操作中建立起一个链表。
struct node {int x,y;node *next; } point;
指针及其应用4——结构体指针相关推荐
- c语言如何将值赋给结构体指针,C语言给结构体指针赋值
<C语言给结构体指针赋值>由会员分享,可在线阅读,更多相关<C语言给结构体指针赋值(6页珍藏版)>请在人人文库网上搜索. 1.指向结构体的指针 在C语言中几乎可以创建指向任何类 ...
- C++之指针探究(九):结构体指针
前文:C++之指针探究(八):指针函数和函数指针 相关博文:C++之结构体探究 结构体指针的定义 (1) C语言中的结构体是一种非基本数据类型,可以将多种数据组合为新的数据类型: (2) 定义 ...
- C语言指针结构体详解,结构体指针,C语言结构体指针详解
结构体指针,可细分为指向结构体变量的指针和指向结构体数组的指针. 指向结构体变量的指针 前面我们通过"结构体变量名.成员名"的方式引用结构体变量中的成员,除了这种方法之外还可以使用 ...
- c语言结构体指针详解,结构体指针,C语言结构体指针详解
结构体指针,可细分为指向结构体变量的指针和指向结构体数组的指针. 指向结构体变量的指针 前面我们通过"结构体变量名.成员名"的方式引用结构体变量中的成员,除了这种方法之外还可以使用 ...
- c语言+结构体指针初始化,c语言结构体指针初始化===
c语言结构体指针初始化 今天来讨论一下C中的内存管理. 记得上周在饭桌上和同事讨论C语言的崛起时,讲到了内存管理方面 我说所有指针使用前都必须初始化,结构体中的成员指针也是一样 有人反驳说,不是吧,以 ...
- 结构体指针变量含义,结构体指针函数
最近在STM的GPIO结构体定义中看到源代码的时候,顺便复习下结构体指针变量的定义及typedef 的使用. 1.结构体类型定义 定义方式1: Typedef struct LNode { int d ...
- c语言中结构体的指针初始化,c语言结构体指针初始化
今天终于看完了C语言深度剖析这本书,对C语言有了进一步的了解与感悟,突然发觉原来自己学C语言的时候学得是那样的迷糊,缺少深入的思考,在重新看书的时候发觉C语言基本教材虽然经典,但是缺乏独到性,老师在讲 ...
- 【C语言】把一个结构体指针转换为另一个结构体指针
目录 1.结构体说明 2.程序示例 3.结果展示 1.结构体说明 typedef struct {double str1;double str2; } Stu;typedef struct{Stu s ...
- C语言函数怎么像python那样返回多个值?(三种方法:1、设置全局变量 2、传递指针 3、使用结构体返回不同类型的数据)
引用文章:c语言函数可不可以返回多个值 文章目录 方法一:设置全局变量 例如:利用一个函数求出正方形的周长和面积. 方法二:使用数组名或指针作为函数的形参 实例2:编写函数求一维整形数组的最大值与最小 ...
最新文章
- 编译GCC4.8.2
- Adobe Reader栈溢出漏洞(CVE-2010-2883)分析
- Python range()的解释和可视化
- Eclipse将整个项目的HTML文件编码改为UTF-8
- mvn tutorial
- 在js在页面中添加百度统计代码
- C#刷遍Leetcode面试题系列连载(1) - 入门与工具简介
- 阿里云上Kubernetes集群联邦 1
- PNP问题-位姿估计方法梳理(pose estimation)
- python中lambda()的用法_python中lambda()的用法
- HBase模式设计之ID顺序增长(rowkey顺序增长)
- 联想r720游戏模式不见了
- ubuntu固定内网ip_Ubuntu 设置固定ip地址
- Ubuntu 16.04 (Ubuntu18.04 也可以用)远程桌面(使用win10远程桌面客户端链接)和 使用vncveiwer链接的配置
- 微信小程序 php解密,微信小程序des加密、PHP des解密
- python爬取微博热搜榜
- rounding mode
- 三次指数平滑法(Holt-Winters)
- python正则匹配任意字符_Python 正则表达式 匹配任意字符的写法
- C语言 日期转时间戳
热门文章
- 【CRR-FMM】A Concise Review of Recent Few-shot Meta-learning Methods
- Jupyter-02-numpy:数组的维度
- @Transactional注解回滚(事物)
- 软件构造 Lab3 CircularOrbit 实验日记
- MATLAB基础——设置符号变量sym,syms,symfun,symvar
- iOS——3DES的加密
- 六管SRAM存储单元之理解记录
- 红轴和青轴哪个手感好 红轴和青轴哪个玩游戏好
- python tkinter 文本框全选_Python Tkinter Entry(文本框)
- cpri和10g-kr的关系?