typedef struct 指针结构体使用方法
A>>>>>>>>>>>>>>>>>>>>>>>>
typedef struct
{
...
...
}POINT,*POINT_P;
POINT为结构名,这个名字主要是为了在结构体中包含自己为成员变量的时候有用
POINT_T为struct POINT的别名
POINT_P为struct POINT*的别名
POINT为结构体名,可声明对象;
POINT_P为struct POINT*的别名,等同于typedef POINT * POINT_P;
* 结构体指针如何使用(二层指针)
#include <iostream>
using namespace std;
typedef struct {
int x;
int y;
}point,*_point; //定义类,给类一个别名
//验证 typedef point * _point;
int main()
{
_point *hp;
point pt1;
pt1.x = 2;
pt1.y = 5;
_point p;
p = &pt1;
hp = &p;
cout<< pt1.x<<" "<<pt1.y <<endl;
cout<< (**hp).x <<" "<< (**hp).y <<endl;
return 0;
}
//运行结果:2 5
2 5
B>>>>>>>>>>>>>>>>>>>>>>>>
typedef用来定义新的数据类型,通常typedef与结构体的定义配合使用。使用typedef的目的使结构体的表达更加简练(所以说typedef语句并不是必须使用的)。
定义一个名字为TreeNode的结构体类型(现在并没有定义结构体变量,并不占用内存空间):
struct TreeNode{ int Element; struct TreeNode* LeftChild; struct TreeNode* RightChild;};
为结构体起一个别名Node,这时Node就等价于struct TreeNode
typedef struct TreeNode Node;
将结构体的定义和typedef语句可以连在一起写:
typedef struct TreeNode{ int Element; struct TreeNode* LeftChild; struct TreeNode* RightChild;}Node;
- 注意不要与“定义结构体类型的同时定义结构体类型变量”混淆:
使用typedef关键字定义结构体类型 | 定义结构体类型的同时定义结构体类型变量 |
---|---|
typedef struct student { int age; int height; }std; //std相当于struct student |
struct student { int age; int height; }std1,std2; //定义了student数据类型的结构体和std1 |
二、使用typedef定义结构体指针
定义一个名为TreeNode的结构体,和指向该结构体类型的指针PtrToTreeNode(不使用typedef):
struct TreeNode{ int Element; struct TreeNode* LeftChild; struct TreeNode* RightChild;};struct TreeNode *PtrToTreeNode; //定义指针
使用typedef关键字用一个单词Node代替struct TreeNode,并定于指向该结构体类型的指针PtrToTreeNode:
struct TreeNode{ int Element; struct TreeNode* LeftChild; struct TreeNode* RightChild;};typedef struct TreeNode Node; //用Node代替struct TreeNodeNode *PtrToTreeNode;//定义指针
将结构体的定义和typedef连在一起写,再次缩短代码:
typedef struct TreeNode{ int Element; struct TreeNode* LeftChild; struct TreeNode* RightChild;}Node; //定义结构体并用Node代替struct TreeNodeNode *PtrToTreeNode; //定义指针
还可以继续缩短代码,直接定义了指向结构体类型的指针,但是这种写法没有为结构体起一个别名。
typedef struct TreeNode{ int Element; struct TreeNode* LeftChild; struct TreeNode* RightChild;} *PtrToTreeNode; //直接定义指针
在定义结构体时,省略struct后面的结构体名也是可以的,但是由于没有名字,操作(如定义结构体变量)只能在定义的同时进行。typedef struct File
{
......
} FileInfo;
取FileInfo为struct file 的别名
typedef struct File
{
.....
}FileInfo, *FileP;
经过我的求证:
给struct file 取个别名为FileInfo
给struct file * 取个别名为FIleP;
如:FileP L;//头指针;
typedef struct 指针结构体使用方法的更多相关文章
- typedef struct与struct定义结构体
今天在定义结构体的时候发现typedef struct与struct定义结构体有一些不同之处: 结构也是一种数据类型, 能够使用结构变量, 因此, 象其他 类型的变量一样, 在使用结构变量时要先对其 ...
- 【AT91SAM3S】SAM3S-EK Demo工程中,LCD驱动程序的加载(函数指针结构体)
为了调试LCD,在英倍特的板子上烧Atmel的sam3s-ek_demo_1.4_source示例代码.LCD显示正常了,却找不到LCD的驱动究竟在哪. 花了好久,追踪到了这个执行过程. 进入main ...
- C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com
原文:C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | I ...
- struct stat结构体简介
在使用这个结构体和方法时,需要引入: <sys/types.h> <sys/stat.h> struct stat这个结构体是用来描述一个linux系统文件系统中的文件属性的结 ...
- Golang面向对象编程-struct(结构体)
Golang面向对象编程-struct(结构体) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是面向对象编程 面向对象编程(Object Oriented Program ...
- go_结构体和方法
面向对象:go语言仅支持封装不支持继承和多态 所以go语言没有class,只有struct(结构体) 无论地址还是结构本身,一律用 . 来访问成员 go语言编译器可以自动区分是值传递还是指针传递,值传 ...
- 六、golang中的结构体和方法、接口
结构体: 1.用来自定义复杂数据结构 2.struct里面可以包含多个字段(属性) 3.struct类型可以定义方法,注意和函数的区分 4.strucr类型是值类型 5.struct类型可以嵌套 6. ...
- _stat函数/struct stat 结构体使用笔记
内容来自互联网,非原创,方便以后查看. 另,关于获取文件信息——_stat函数的使用详见 http://blog.csdn.net/frank_liuxing/article/details/1860 ...
- struct socket结构体详解
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://weiguozhihui.blog.51cto.com/3060615/15852 ...
随机推荐
- Android学习笔记Log类输出日志信息
Log类提供的方法 代码示例 .. Log.e(TAG,"[错误信息]"); Log.w(TAG,"[警告信息]"); Log.i(TAG,"[普通信 ...
- Andrew Ng - 深度学习工程师 - Part 1. 神经网络和深度学习(Week 2. 神经网络基础)
=================第2周 神经网络基础=============== ===2.1 二分分类=== ===2.2 logistic 回归=== It turns out, whe ...
- Quartz.Net系列(七):Trigger之SimpleScheduleBuilder详解
所有方法图 1.SimpleScheduleBuilder RepeatForever:指定触发器将无限期重复. WithRepeatCount:指定重复次数 var trigger = Trigge ...
- 什么了解suite集合实现
Testsuite继承BaseTestSuite其实内部的东西不是太多--生成suite集合的逻辑主要如下-我这里没有扒源码-因为他最终生成的TestsSuite关联的模块比较多--如果贴源码出来-- ...
- 安卓开发-Activity-多个Activity的开发方法。
原文链接:https://blog.csdn.net/weixin_38420342/article/details/84344496 一.切换Activity的5种方式 Intent intent ...
- 操作系统识别-python、nmap
识别操作系统主要是用于操作系统漏洞的利用.不管是windows还是linux系统,在安装完毕后都会默认启动一些服务,开启一些端口. 识别目标主机的系统最简单的方法就是发送ping包,windows起始 ...
- SpringBoot项目jar包启动脚本
startup.bat @echo off set path=X:\xxxxxxx\Java\JDK\jre\bin START "项目名" "%path%\java&q ...
- vue的生命函数周期以及钩子函数的详解
首先我们先附上官网的图 图中展现出的是vue整个生命周期以及钩子函数 1- beforeCreate(创建前) 2- created(创建完成) 3- beforeMount(挂载前) 4- mo ...
- python用pandas遍历csv文件
import pandas as pd df = pd.read_csv('a.csv') for index, row in df.iterrows(): x, y = row['X'], row[ ...
- 【UVA11383】 Golden Tiger Claw 【二分图KM算法(板子)】
题目 题目传送门:https://www.luogu.com.cn/problem/UVA11383 分析 最近刚刚学了二分图,然后来了一个这样的题,看完题意之后,稍微想一想就能想出来是一个二分图,然 ...