结构体指针的定义与使用 
当一个指针变量用来指向一个结构体变量时,称之为结构体指针变量。 结构体指针变量的值是所指向的结构体变量的起始地址。通过结构体指针即可访问该结构体变量,这与数组指针和函数指针的情况是相同的。
结构体指针变量定义的一般形式: 结构体名 *结构体指针变量名     
当然也可以在定义结构体的同时定义这个结构体指针变量。      
例如:(定义一个结构体(类型为自己定义的 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——结构体指针相关推荐

  1. c语言如何将值赋给结构体指针,C语言给结构体指针赋值

    <C语言给结构体指针赋值>由会员分享,可在线阅读,更多相关<C语言给结构体指针赋值(6页珍藏版)>请在人人文库网上搜索. 1.指向结构体的指针 在C语言中几乎可以创建指向任何类 ...

  2. C++之指针探究(九):结构体指针

    前文:C++之指针探究(八):指针函数和函数指针 相关博文:C++之结构体探究 结构体指针的定义   (1) C语言中的结构体是一种非基本数据类型,可以将多种数据组合为新的数据类型:   (2) 定义 ...

  3. C语言指针结构体详解,结构体指针,C语言结构体指针详解

    结构体指针,可细分为指向结构体变量的指针和指向结构体数组的指针. 指向结构体变量的指针 前面我们通过"结构体变量名.成员名"的方式引用结构体变量中的成员,除了这种方法之外还可以使用 ...

  4. c语言结构体指针详解,结构体指针,C语言结构体指针详解

    结构体指针,可细分为指向结构体变量的指针和指向结构体数组的指针. 指向结构体变量的指针 前面我们通过"结构体变量名.成员名"的方式引用结构体变量中的成员,除了这种方法之外还可以使用 ...

  5. c语言+结构体指针初始化,c语言结构体指针初始化===

    c语言结构体指针初始化 今天来讨论一下C中的内存管理. 记得上周在饭桌上和同事讨论C语言的崛起时,讲到了内存管理方面 我说所有指针使用前都必须初始化,结构体中的成员指针也是一样 有人反驳说,不是吧,以 ...

  6. 结构体指针变量含义,结构体指针函数

    最近在STM的GPIO结构体定义中看到源代码的时候,顺便复习下结构体指针变量的定义及typedef 的使用. 1.结构体类型定义 定义方式1: Typedef struct LNode { int d ...

  7. c语言中结构体的指针初始化,c语言结构体指针初始化

    今天终于看完了C语言深度剖析这本书,对C语言有了进一步的了解与感悟,突然发觉原来自己学C语言的时候学得是那样的迷糊,缺少深入的思考,在重新看书的时候发觉C语言基本教材虽然经典,但是缺乏独到性,老师在讲 ...

  8. 【C语言】把一个结构体指针转换为另一个结构体指针

    目录 1.结构体说明 2.程序示例 3.结果展示 1.结构体说明 typedef struct {double str1;double str2; } Stu;typedef struct{Stu s ...

  9. C语言函数怎么像python那样返回多个值?(三种方法:1、设置全局变量 2、传递指针 3、使用结构体返回不同类型的数据)

    引用文章:c语言函数可不可以返回多个值 文章目录 方法一:设置全局变量 例如:利用一个函数求出正方形的周长和面积. 方法二:使用数组名或指针作为函数的形参 实例2:编写函数求一维整形数组的最大值与最小 ...

最新文章

  1. 编译GCC4.8.2
  2. Adobe Reader栈溢出漏洞(CVE-2010-2883)分析
  3. Python range()的解释和可视化
  4. Eclipse将整个项目的HTML文件编码改为UTF-8
  5. mvn tutorial
  6. 在js在页面中添加百度统计代码
  7. C#刷遍Leetcode面试题系列连载(1) - 入门与工具简介
  8. 阿里云上Kubernetes集群联邦 1
  9. PNP问题-位姿估计方法梳理(pose estimation)
  10. python中lambda()的用法_python中lambda()的用法
  11. HBase模式设计之ID顺序增长(rowkey顺序增长)
  12. 联想r720游戏模式不见了
  13. ubuntu固定内网ip_Ubuntu 设置固定ip地址
  14. Ubuntu 16.04 (Ubuntu18.04 也可以用)远程桌面(使用win10远程桌面客户端链接)和 使用vncveiwer链接的配置
  15. 微信小程序 php解密,微信小程序des加密、PHP des解密
  16. python爬取微博热搜榜
  17. rounding mode
  18. 三次指数平滑法(Holt-Winters)
  19. python正则匹配任意字符_Python 正则表达式 匹配任意字符的写法
  20. C语言 日期转时间戳

热门文章

  1. 【CRR-FMM】A Concise Review of Recent Few-shot Meta-learning Methods
  2. Jupyter-02-numpy:数组的维度
  3. @Transactional注解回滚(事物)
  4. 软件构造 Lab3 CircularOrbit 实验日记
  5. MATLAB基础——设置符号变量sym,syms,symfun,symvar
  6. iOS——3DES的加密
  7. 六管SRAM存储单元之理解记录
  8. 红轴和青轴哪个手感好 红轴和青轴哪个玩游戏好
  9. python tkinter 文本框全选_Python Tkinter Entry(文本框)
  10. cpri和10g-kr的关系?