结构体struct和typedef后面接指针的含义

C语言结构体指针 说明: 结构体的成员可以属于另一个结构体类型 struct Date { int month;int day;int year}; struct Student { int num; char name[20]; char sex; int age; struct Date birthday; //birthday就是Date的形式 car add[30]; } 建立结构体类型,相当于一个模型,没有定义变量,系统不为之分配存储单元。 定义结构体变量类型 1.先声明结构体类型,再定义该类 阅读详情

在C语言里面,struct是用来定义新的数据类型——结构体,typedef是给数据类型取别名。
据说这两个关键词同时使用有助于减少代码量和增加代码的可读性(不过我认为它当typedef和struct在一起的时候反而降低了代码的可读性),很多时候为了方便,我们常常讲stuct与typedef放在一起用。

像这样的代码是比较好理解的,就是取FileInfo为sturct file的别名嘛。

typedef struct file{
...
}FileInfo;

但是在严奶奶的《数据结构》那本书里面却充满了这样的用法:

typedef struct file{
...
}FileInfo, *FileP;

这种用法让我感到很迷惑,经过了本人多方考证和验证,它是这么个意思:

给struct file 取个别名为FileInfo  给struct file * 取个别名为FileP

说也怪啊。你说用typedef struct … FileInfo增加代码的可读性,我勉强可以接受。
但是你说用typedef struct … *FileP可以增加代码的可读性,我真的是撞邪了。当我面对下面一行代码的时候

FileP P

要不是其中的“P”,我还真的想不到变量“P”是一个指针。

有人评论说:您解释说 “ 给struct file * 取个别名为FileP ” 可能不是很准确,比如 “ int *p ” 准确的说法应该是 “ 定义p是指向一个整形变量的指针 ”,而没有 “ int* ” 这种变量类型,这个地方解释为 “ 给struct file 取别名为FileInfo,同时定义一个指向这个结构体的指针变量FileP ” 您看会不会更合适。


#include<stdio.h>
#include<string.h>

typedef struct emp{
 char sex[8];
 char name[15];
 int age;
}*emp;//这里我们用typedef把emp这个结构体变成了*emp这种指向结构体成员的结构体指针

/*typedef struct emp{
 char sex[8];
 char name[15];
 int age;
}pi,*emp;//为了程序的可读性最好不要这样声明*/

int main(){
 emp p;//注意这里emp是指向结构体的指针变量 emp *p这样的声明是错误的,emp p这样声明了结构体类型的指针变量p 
 strcpy(p->sex,"male");
 strcpy(p->name,"zhangfei");
 p->age=20;
 printf("sex is %s\n",p->sex);
 printf("name is %s\n",p->name);
 printf("Age is %d\n",p->age);
 return 0;
}


C语言中细说用typedefstruct定义结构体的区别及其在单片机C语言开发中的应用 上面的声明的结构体并没有定义结构体变量,只是建立了一个名为b_type的结构体类型。如果仅仅如此,编译的时候,是不会给这个结构体分配存储单元的。// b为结构体变量名/*!/*!此外,在声明结构体时还可以不指定结构体类型名// 直定义结构体变量GPIO_InitTypeDefstruct 阅读详情

相关推荐

【Claude Code的Harness Engineering实现】:06-记忆系统(Memory)

记忆系统是Claude Code实现跨会话持久化上下文保持的核心组件。它分为短期记忆(当前会话的对话历史)长期记忆(跨会话保留的结构化信息),通过多层级的文件系统实现灵活的记忆管理。

rengang66的博客 207

C语言 typedef struct指针小结

typedef用逗号隔开。表示这个类型有多个别名。 输出: 假设要再结构体中新一个成员。为指向自己的指针。如下: 编译时会报错。说不存在pT这个类型 原因就像是一个顺序的问题。在typedef里面用这个typedef定义的别名是不行的。因为在程序中这个typedef还没有执行完。就不会有pT这个定义。所有就会报这个错误。 但是如果我们要在结构体中有一个指向自己的指...

xiaopan233的博客 8090

智能绿植管家:基于 ESP32 的室内植物自动补光与环境调控系统

本文设计的基于 ESP32 的室内植物自动补光与生长环境调控系统,实现了植物生长环境的自动化、智能化管理。硬件选型合理、线简单,软件逻辑清晰、易于调试,能够有效解决室内植物生长环境不适的问题。系统具备良好的实用性扩展性,可为园艺爱好者小型培育场所提供稳定、高效的植物养护方案。

weixin_42300449的博客 127

关于结构体指针typedef struct后面*指针

前言 先看个结构体 typedef struct node { int data; struct node *rchild,*lchild; }node,*Node; OK,这里面的使用了typedef关键字,node就是替代了struct node的意思,而Node则代表了struct node*的意思,他指针指向了整个结构体 当你创建的是node T时,只能用T.data来表示数据 当你用Node指针创建时,Node T就可以用T->data来表示数据 我用了一段代码来验证结果

weixin_47321452的博客 2万+

结构体定义 typedef struct 用法详解小结

typedef可以声明新的类型名来代替已有的类型名,但却不能增新的类型.typedef为C语言的关键字,作用是为一种数据类型定义一个名字。在编程中使用typedef目的一般有两个,一个是给变量提供一个易记且意义明确的新名字(类型有新别名,方便变量的定义),另一个是简化一些比较复杂的类型声明。在上述的变量定义中,s1、s2、s3都被定义为char *,而s4则定义成了char,不是我们所预期的指针变量,根本原因就在于#define只是简单的字符串替换而typedef则是为一个类型起新名字

Cerulea_n的博客 4万+

转:结构体定义 typedef struct 用法详解用法小结

typedef是类型定义的意思。typedef struct 是为了使用这个结构体方便。 具体区别在于: 若struct node {}这样来定义结构体的话。在申请node 的变量时,需要这样写,struct node n; 若用typedef,可以这样写,typedef struct node{}NODE; 。在申请变量时就可以这样写,NODE n; 区别就在于使用时,是否可以省去str

my_qingwwlong的专栏 349

C语言中struct typedef 以及结构体指针用法

structtypedef以及结构体指针用法 typedef用法结构体指针用法结构体初始化   typedef是类型定义的意思。typedef struct 是为了使用这个结构体方便。具体区别在于: 若struct node{ }这样来定义结构体的话。在定义 node 的结构体变量时,需要这样写:struct node n; 若用typedef,可以这样写:typedef struct no...

乌鸦大大 5万+

c/c++结构体的定义及使用:struct typedef struct详细总结(含代码实例)

c/c++结构体的定义及使用:struct typedef struct详细总结(含代码实例)结构体struct详解struct结构体变量一般形式成员的获取赋值指针数组数组成员赋值结构体嵌套结构体与函数结构体typedef struct详解一般形式形式一形式二typedef struct的用法实践用途1用途2定义结构体数组类型规范例子定义结构体指针规范定义实现在cc++中structty...

Forever_Blue_sky的博客 2万+

structtypedef struct彻底明白了

更详细准确内容参见: C/C++语法知识:typedef struct 用法详解 typedef struct OLNode {   int i,j;   int data;   OLNode *right,*down; }OLNode,*OLink;//结构的对象OLNode, 指向结构的指针*OLink, 可以这样写 struct OLNode{}; OLNode OLNode, *O...

Poo_Chai的博客 8万+

C语言结构体typedef struct详解

1、typedef关键字 C 语言提供了 typedef 关键字,您可以使用它来为类型取一个新的名字。下面的实例为单字节数字定义了一个术语 BYTE: typedef unsigned char BYTE; 在这个类型定义之后,标识符 BYTE 可作为类型 unsigned char 的缩写,例如: BYTE b1, b2; typedef相当于给unsigned char起...

羊脂球的博客 3万+

有关结构体typedef struct Node{ }Node, *LinkedList;的解惑

在数据结构中会看到: typedef struct QNode { QElemType data; //数据域 struct QNode *next; //指针域 }QNode,*QueuePtr; typedef struct { QueuePtr front; //队头指针 QueuePtr rear; //队尾指针 }; 先来解释下上面第一个结构体 关键在于后面的那个部分如何理解 就是QNode,*QueuePtr这两个如何理解; 可以这样来理解 typedef stru

Cybenko 7694

C | typedef 结构体指针定义理解

在C语言里面,struct是用来定义新的数据类型——结构体typedef是给数据类型取别名。 用法1: typedefstructfile{ ... }FileInfo; 就是取FileInfo为sturct file的别名嘛。 用法2: typedefstructfile{ ... }FileInfo,*FileP; 上述程序中定义了一个结构体结构体的...

默默提升实验室 6691

typedef struct 用法

typedef struct 用法

m0_65508678的博客 4万+

typedefstruct,以及结构体指针

struct 用于定义结构体类型,是结构体类型的标志。 1:先定义结构体的数据类型,在定义数据类型变量: struct number { };//声明了一个叫做number的结构体 struct number stu1; 2:定义结构体数据类型的同时定义结构体类型变量: struct number { }num;//此时num是结构体struct number实例的一个对象 num stu1; ...

weixin_41908108的博客 2732

sigfit 光机热耦合分析实例

sigfit 光机热耦合分析实例指导,是有限元分析与光学分析的口。

上一篇: continue和break
下一篇: typedef关键字与结构体、结构体指针的定义
deepeed121
博客等级 码龄11年 242粉丝 213原创
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值