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

C语言中struct typedef 以及结构体指针用法struct typedef 以及结构体指针用法 typedef 用法结构体指针用法结构体初始化 typedef 是类型定义的意思 typedefstruc 是为了使用这个结构体方便 具体区别在于 若 structnode 这样来定义结构体的话 在定义 node 的结构体变量时 需要这样写 structnoden 若用 typedef 可以这样写 typedefstruc

struct 、typedef以及结构体指针用法

  typedef是类型定义的意思。typedef struct 是为了使用这个结构体方便。具体区别在于:

  • 若struct node{ }这样来定义结构体的话。在定义 node 的结构体变量时,需要这样写:struct node n;
  • 若用typedef,可以这样写:typedef struct node{}NODE; 。在申请变量时就可以这样写:NODE n;其实就相当于 NODE 是node 的别名。区别就在于使用时,是否可以省去struct这个关键字。 有些时候,typedef struct NODE{ }NODE;还是可以直接NODE n;定义一个NODE类型的结构体

typedef用法

用法举例1:在C中定义一个结构体类型时如果要用typedef:

typedef struct Student { 
     int no; char name[12]; }Stu,student; 
struct Student { 
     int no; char name[12]; }Stu; 
typedef struct { 
     int no; char name[12]; }Stu; 

用法举例4:typedef 还可以掩饰复合类型,如指针和数组。定义一个 typedef,每当要用到相同类型和大小的数组时,可以这样

typedef char Line[81]; 

此时Line类型即代表了具有81个元素的字符数组,使用方法,例如Line text, secondline;

结构体指针用法

结构体指针用法1
结构体要自引用时,Student1是错误用法。试想引用成员next是另一个完整的结构,其内部还将包含它自己的成员next,这第二个成员又包含一个完整的结构,它还将包括它自己的成员next,这样重复下去永无休止,内存都用光了。所以不合法。

struct Student1 { 
     int age; struct Student1 next; }; 

正确的用法是:结构体自引用 ,只能自引用指针。编译器在结构的长度确定之前就已经知道指针的长度,所以这种自引用是合法的。结构体的自引用在实现链表,树等高级的操作时用处很大。

struct Student1 { 
     int age; struct Student *next; }; 

结构体指针用法注意:这样是不行的,虽然Student1代表了结构体,但是Student1类型名的声明是在末尾定义,当要声明struct{ }时,内部无法识别Student1类型。

typedef struct { 
     int age; Student1 *next; }Student1,*StudentPtr; 

结构体指针用法2
注意此时,Student1是struct Student{}的别名,StudentPtr是Student的指针

typedef struct Student1 { 
     int age; Student1 *next; }Student1,*StudentPtr; 

  我使用StudentPtr时出现了个有意思现象,结构体指针若不手动分分配内存,讲道理是不能用的。当定义了两个结构体指针s1,s2,两个结构体指针都不分配内存,给其中一个赋值,然后使用没有问题,输出良好。

#include <stdio.h> typedef struct Student1 { 
     int age; Student1 *next; }Student1,*StudentPtr; int main() { 
     StudentPtr s1; StudentPtr s2; s1->age= 9; printf("%d",s1->age); return 0; } 

  当尝试给另一个结构体指针赋值时,编译没有问题,程序运行奔溃。

在这里插入图片描述
在这里插入图片描述
  正确用法应该是




  1. 结构体指针需要初始化
  2. 结构体指针的成员指针同样需要初始化
  3. 若直接使用结构体,结构体中有成员指针,成员指针也要先初始化

在这里插入图片描述

结构体初始化


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/211386.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午10:33
下一篇 2026年3月18日 下午10:33


相关推荐

  • ubuntu18.04安装pycharm专业版

    ubuntu18.04安装pycharm专业版安装的 pycharm 版本 2017 4 操作系统 ubuntu18 04LTS 步骤 1 在官网下载安装包 https www jetbrains com pycharm download section linux 下载文件位于 Downloads 下选择对应版本步骤 2 解压到文件夹 opt 该文件夹内安装的程序都是 allinone 便于删除程

    2026年3月17日
    2
  • 内外网同时使用route add

    内外网同时使用route add使用routeadd添加路由,使两个网卡同时访问内外网routeadd命令格式:route[-f][-p][Command][Destination][maskNetmask][Gateway][metricMetric][ifInterface] 通过配置电脑的静态路由来实现同时访问内外网的。电脑的网络IP配置不用变,两个网卡都按照正常配置(都配置IP地址、子网掩码、网…

    2022年8月12日
    12
  • 如何修改Foxmail的背景

    如何修改Foxmail的背景

    2021年7月6日
    555
  • OpenClaw 到底能干啥,能赚钱不?

    OpenClaw 到底能干啥,能赚钱不?

    2026年3月13日
    2
  • JSONObject 对象转化为Map「建议收藏」

    JSONObject 对象转化为Map「建议收藏」阿里的JSONObject对象转化为Map对象//json对象转为mappublicMap<String,Object>JsonToMap(JSONObjectjson){System.out.println(“********************转Map对象******************”+json);Map<String,Object>data=newHashMap<>();

    2022年8月23日
    16
  • 朋友圈投票怎么刷票呢_微信投票最低多少一票

    朋友圈投票怎么刷票呢_微信投票最低多少一票揭露微信朋友圈当中出现刷票群0.01一票微信号、刷票0.01一票微信号的虚假面目,在微信朋友圈,每个人可能都遇到过好友“晒”出的投票链接,不过,看似单纯的微信投票背后,却乱象丛生,甚至还暗藏着灰色利益链。                                      变了味的朋友圈投票  “亲,帮我家孩子投个票吧”,“今天继续投哟,一天3票哦”……相信不少人在朋友圈或微信群中都收到过…

    2026年1月17日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号