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
、std2结构体变量

二、使用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后面的结构体名也是可以的,但是由于没有名字,操作(如定义结构体变量)只能在定义的同时进行。(给它起个名字就那么难么…qwq)

原文地址:https://www.cnblogs.com/liusanjian/p/11684789.html

时间: 2024-08-12 23:39:15

typedef struct 指针结构体使用方法的相关文章

typedef struct与struct定义结构体

今天在定义结构体的时候发现typedef struct与struct定义结构体有一些不同之处: 结构也是一种数据类型, 可以使用结构变量, 因此,  象其它 类型的变量一样, 在使用结构变量时要先对其定义. 定义结构变量的一般格式为: struct 结构名 { 类型  变量名; 类型  变量名; ... } 结构变量; 结构名是结构的标识符不是变量名. 另一种常用格式为: typedef struct 结构名 { 类型  变量名; 类型  变量名; ... } 结构别名; 另外注意:  在C中,

C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com

原文:C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 本文由 arthinking 发表于315 天前 ⁄ itzhai.com原创文章 ⁄ C语言 ⁄ 评论数 3 ⁄ 被围观 1,775 views+ 指针数组: 在一个数组中,如果它的元素全部都是指针类

struct socket结构体详解

在内核中为什么要有struct socket结构体呢?    struct socket结构体的作用是什么?    下面这个图,我觉得可以回答以上两个问题.      由这个图可知,内核中的进程可以通过使用struct socket结构体来访问linux内核中的网络系统中的传输层.网络层.数据链路层.也可以说struct socket是内核中的进程与内核中的网路系统的桥梁.   struct socket {      socket_state  state; // socket state  

关于物体 &#39;固有类别&#39; 与 &#39;实际使用类别&#39; 分离的情况,结构体定义方法

在面向接口.面向对象编程的过程中,会遇到实际物体类别与定义类别相分离的情况. 例如,我们有三种物体,他们的固有类别分别为: TYPEA,TYPEB,TYPEC.在我们实际使用过程中,我们会根据不同的情况将他们分成 2 组: Group1,Group2. 那么,我们在定义结构体和物理类别时,需要注意对 Group 进行定义.定义物体具体属性和结构体如下: #define TYPEA (0x01UL << 0) #define TYPEB (0x01UL << 1) #define T

程序猿之---C语言细节21(#define和typedef区别、结构体细节)

主要内容:#define和typedef区别.结构体细节 #include <stdio.h> #define INT_D int* #define CHAR_D char int main() { /*#define 与 typedef区别*/ typedef int* INT_T; typedef char CHAR_T; INT_T a,b; // a.b都为int型指针 INT_D c,d; // c为int型指针.d为int整型 unsigned CHAR_D e; // #defi

struct stat结构体简介

在使用这个结构体和方法时,需要引入: <sys/types.h> <sys/stat.h> struct stat这个结构体是用来描述一个linux系统文件系统中的文件属性的结构. 可以有两种方法来获取一个文件的属性: 1.通过路径: int stat(const char *path, struct stat *struct_stat); int lstat(const char *path,struct stat *struct_stat); 两个函数的第一个参数都是文件的路径

go结构体与方法

go结构体相当于python中类的概念 结构体用来定义复杂的数据结构,存储很多相同的字段属性 1.结构体的定义以及简单实用 package main import ( "fmt" ) func main() { type Student struct { //定义结构体 name string age int } s1 := new(Student) // 定义指向结构体的指针 s1.name = "xiaomu" s1.age = 10 fmt.Printf(&q

Go-常识补充-切片-map(类似字典)-字符串-指针-结构体

目录 Go 常识补充 Go 命名 打印变量类型科普 _ 关键字 命名规范相关 包目录规范 切片 多维切片 切片初始化的方法 多维切片初始化 切片删除元素(会略微影响效率 ,少用) copy 函数 打散切片 循环打印多维切片 Map (类似 python 字典) map 定义及初始化 赋值.取值.改值 map 删除元素.参数传递 map 相等比较.循环遍历 字符串 字符串的定义.长度.遍历字节.字符 指针 向函数传递指针参数 传递数组指针 (最好是用切片) 结构体 结构体零值 匿名结构体 结构体指

struct list_head结构体及相关函数

struct list_head结构体是linux实现数据结构双向链表的基础.其定义: struct list_head { struct list_head *next, *prev; }; 可见链表里面的成员还是链表,每个链表都指向了前面和后面的链表. 一般将struct list_head作为一个成员,放到一个结构体中,其作用是可以从当前的结构体指针,获取到下一个链表元素的地址.一般用list_entry()来实现.具体按照下面的链接: http://www.cnblogs.com/bas