精华内容
下载资源
问答
  • C语言 typedef struct指针小结

    千次阅读 多人点赞 2019-06-04 21:43:52
    为指向自己的指针。如下: 编译时会报错。说不存在pT这个类型 原因就像是一个顺序的问题。在typedef里面用这个typedef定义的别名是不行的。因为在程序中这个typedef还没有执行完。就不会有pT这个定义。所有就...

    typedef用逗号隔开。表示这个类型有多个别名。

    输出:

     

    假设要再结构体中新加一个成员。为指向自己的指针。如下:

    编译时会报错。说不存在pT这个类型

    原因就像是一个顺序的问题。在typedef里面用这个typedef定义的别名是不行的。因为在程序中这个typedef还没有执行完。就不会有pT这个定义。所有就会报这个错误。

    但是如果我们要在结构体中有一个指向自己的指针。可以有两种解决方法:

    1. 先typedef完后再使用

    1. 不使用typedef定义的别名

    展开全文
  • C语言中struct typedef 以及结构体指针用法

    万次阅读 多人点赞 2019-03-04 18:42:29
    structtypedef以及结构体指针用法 typedef用法结构体指针用法结构体初始化   typedef是类型定义的意思。typedef struct 是为了使用这个结构体方便。具体区别在于: 若struct node{ }这样来定义结构体的话。...

    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;
    

    于是在声明变量的时候就可:Stu stu1;或者:student stu2;(Stu 和student 同时为Student的别名)
    用法举例2:如果没有typedef,传统定义一个结构体:

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

    此时说明已经定义了一个结构体Stu变量,如果要重新新建,就必须用struct Student stu1;
    用法举例3:如果使用了typedef,另外这里也可以不写Student(于是也不能struct Student stu1;了)

    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. 若直接使用结构体,结构体中有成员指针,成员指针也要先初始化

    在这里插入图片描述

    结构体初始化

      结构的初始化方式和数组初始化很相似。一个位于一对花括号内部,由逗号分隔的初始值列表可用于结构的初始化。这些值根据结构成员列表的顺序写出。
    在这里插入图片描述

    展开全文
  • c语言:typedef + struct + 指针

    千次阅读 2018-11-06 19:51:15
    typedef struct ANSWER_HEADER { u8 u8Type; u8 u8Code; u32 u32TimeStamp; struct ANSWER_HEADER *pNext; }ANSWER_HEADER_T, *PANSWER_HEADER_T;   ANSWER_HEADER为结构名,这个名字主要是为了在...

    c语言规范,定义结构体:

    typedef  struct ANSWER_HEADER

    {

    u8 u8Type;

    u8 u8Code;

    u32 u32TimeStamp;

    struct ANSWER_HEADER *pNext;

    }ANSWER_HEADER_T, *PANSWER_HEADER_T;

     

    ANSWER_HEADER为结构名,这个名字主要是为了在结构体中包含自己为成员变量的时候有用

    ANSWER_HEADER_T为struct  ANSWER_HEADER的别名

    PANSWER_HEADER_T为struct  ANSWER_HEADER*的别名

     

    上面的定义方式等价于

     

    struct ANSWER_HEADER

    {

    u8 u8Type;

    u8 u8Code;

    u32 u32TimeStamp;

    struct ANSWER_HEADER *pNext;

    };

    typedef  struct ANSWER_HEADER ANSWER_HEADER_T;

    typedef  struct ANSWER_HEADER *PANSWER_HEADER_T;

     

    ********************************************************************

    结构的定义:

    定义一个结构的一般形式为:
    struct 结构名
        {成员表列};
    成员列表的形式为:

     类型说明符  成员名;
     
    例如 :
    struct stu
    {
     int num;
     char name[20];
     char sex;
     float score;
    };

    声明结构变量的三种方法:
    1.先定义结构类型,再声明:
            struct stu 
            { 
             int num; 
             char name[20]; 
             char sex; 
             float score; 
            };
            struct stu boy1, boy2; 
            也可以用宏定义使一个符号常量来表示
            一个结构类型。 
            例如: 
            #define STU struct stu 
            STU 
            { 
             int num; 
             char name[20]; 
             char sex; 
             float score; 
            }; 
            STU boy1, boy2;

    2.  在定义结构类型的同时说明结构变量
            例如: 
            struct stu 
             { 
                 int num; 
                 char name[20]; 
                 char sex; 
                 float score; 
            }boy1, boy2; 
            这种形式的说明的一般形式为: 
            struct 结构名 
            { 
             成员表列 
            }变量名表列;

     3.  直接说明结构变量。 
            例如: 
            struct 
            { 
             int num; 
             char name[20]; 
             char sex; 
             float score; 
            }boy1, boy2; 
            这种形式的说明的一般形式为:
            struct
            { 
                 成员表列 
            }变量名表列;

            结构指针变量说明的一般形式为: 
            struct 结构名 *结构指针变量名 
            例如:
            struct stu *pstu; 
            当然也可在定义 stu 结构时同时说明 pstu。
            例如:
            struct stu 
            { 
                 int num; 
                 char name[20]; 
                 char sex; 
                 float score; 
            }boy1, boy2, *pstu;

     

    ****************************************************************************************

     

    下面是谭浩强老师c语言书中typedef一节:

    类型定义符typedef 

    C语言不仅提供了丰富的数据类型,而且还允许由用户自己定义类型说明符,也就是说

    允许由用户为数据类型取“别名”。类型定义符 typedef 即可用来完成此功能。例如,有整

    型量 a,b,其说明如下: 

        int a,b; 

    其中 int 是整型变量的类型说明符。int 的完整写法为 integer,为了增加程序的可读性,

    可把整型说明符用 typedef 定义为: 

    typedef int INTEGER 

    这以后就可用 INTEGER 来代替 int 作整型变量的类型说明了。  

    例如: 

        INTEGER a,b; 

    它等效于: 

        int a,b; 

    用 typedef 定义数组、指针、结构等类型将带来很大的方便,不仅使程序书写简单而且

    使意义更为明确,因而增强了可读性。 

    例如: 

        typedef char NAME[20];    表示 NAME 是字符数组类型,数组长度为 20。然后可

    用 NAME 说明变量,如: 

        NAME a1,a2,s1,s2; 

    完全等效于: 

        char a1[20],a2[20],s1[20],s2[20] 

    又如: 

     

    typedef struct stu 

        char name[20]; 

        int age; 

        char sex; 

    } STU; 

    定义 STU 表示 stu 的结构类型,然后可用 STU 来说明结构变量: 

    STU body1,body2; 

    typedef 定义的一般形式为: 

    typedef 原类型名  新类型名  

    其中原类型名中含有定义部分,新类型名一般用大写表示,以便于区别。 

    有时也可用宏定义来代替 typedef 的功能,但是宏定义是由预处理完成的,而 typedef

    则是在编译时完成的,后者更为灵活方便。

    展开全文
  • struct 用于定义结构体类型,是结构体类型的标志。 1:先定义结构体的数据类型,在定义数据类型变量: struct number { };//声明了一个叫做number的结构体 struct number stu1; 2:定义结构体数据类型的同时定义...

    struct
    用于定义结构体类型,是结构体类型的标志。

    1:先定义结构体的数据类型,在定义数据类型变量:

    struct number
    {
    };//声明了一个叫做number的结构体
    struct number stu1;
    

    2:定义结构体数据类型的同时定义结构体类型变量:

    struct number
    {
    }num;//此时num是结构体struct number实例的一个对象
    num stu1;
    

    typedef
    在c/c++中使用typedef,主要有两个目的:
    1:为已经存在的数据类型(注意!指针类型也可以)取一个新的名字(别名)。

    typedef int numer;
    number x;//此时x为一个int型的数
    typedef char*  number;
    number x;//此时x为一个字符类型的指针
    

    除了为数据类型构造别名之外,还可以在定义这些构造数据类型的同时为这些构造数据类型取别名, 根据我自己的理解,typedef struct 可以同样如此理解:

    typedef  struct Student{
    
    }stu;
    

    此处为结构体Struct取了一个别名Student。同时为struct Student取别名stu,即struct Student = stu。//其中Student也可以不写,在声明时,即stu stu2。
    在声明时:

    struct Student stu1;
    stu stu2;
    

    以上两者都是等价的。

    关于结构体指针的一些使用说法:
    许多时候我们需要一个指针指向结构体,在看过了网上许多用法之后,我比较安利以下用法(大佬忽视):
    在定义时时,就定义为一般的结构体类型,在声明时,将其声明为结构体类型的指针:

    typedef struct
    {
    	int date;
    	int Length;
    }List;
    List *LL;
    

    若需调用函数的参数为结构体类型,此时使用&运算符即可。

    void Length(&LL);
    

    或者在定义函数时,把参数设置为(List *L),调用时就可以直接(LL)。

    关于结构体指针的使用有多种方法,以上为我个人笔记,记录一种容易记住的。
    共同进步,永远向前!

    展开全文
  • 结构体structtypedef后面指针的含义

    千次阅读 多人点赞 2017-12-29 21:04:46
    在C语言里面,struct是用来定义新的数据类型——结构体,typedef是给数据类型取别名。 据说这两个关键词同时使用有助于减少代码量和增加代码的可读性(不过我认为它当typedefstruct在一起的时候反而降低了代码的...
  • typedef structstruct区别

    万次阅读 多人点赞 2018-05-26 18:02:47
    typedef structstruct区别
  • typedef在C中叫做声明别名,就是说同种事物的另外一个称谓,而C的别名代表的是typedef后面定义的所有内容,别名会写在最后。所以,}后面的Lnode和*LinkList都是struct Lnode的别名,使用别名的目的就是为了让结构体...
  • typedef struct 指针

    千次阅读 2019-02-27 14:41:56
    #include &lt;... typedef struct std  {  char name[10];  int year;  }Std,*pStd;    Std s1={"li ming",2019};   pStd p1;  p1=&amp;s1;    printf("s1.na...
  • typedef + struct + 指针

    千次阅读 2014-04-14 22:26:40
    c语言:typedef + struct + 指针  (2011-12-26 16:07:38) 转载▼ 标签:  杂谈 分类: c语言经验总结理解 http://write.blog.csdn.net/postedit    c语言规范,...
  • typedef struct指针

    千次阅读 2016-11-01 15:39:17
    在学习链表时遇到了typedef已经用typedef定义的指针,不是很懂,某浪里有位博主的博文写的很详细,我直接粘过来 假设我们定义一个结构体:typedef struct ANSWER_HEADER { u8 u8Type; u8 u8Code; u32 u32TimeStamp; ...
  • typedef后, 后面的语句的语义就改变了, 用typedef定义类型别名,这个别名和类型一样使用, struct S{int i;} a,b; 定义结构 S和 S的变量a,b typedef struct S{int i;} a,b; 这里除了定义结构S, 又起了别名a和b, a和...
  • structtypedef struct彻底明白了

    千次阅读 多人点赞 2018-07-17 16:31:32
    structtypedef struct彻底明白了 转载地址:https://www.cnblogs.com/qyaizs/articles/2039101.html structtypedef struct 分三块来讲述:  1 首先://注意在C和C++里不同  在C中定义一个结构体类型要用...
  • structtypedef struct的区别

    万次阅读 多人点赞 2016-08-21 17:03:25
    typedef struct 是为了使用这个结构体方便。 具体区别在于: 若struct node {}这样来定义结构体的话。在申请node 的变量时,需要这样写,struct node n; 若用typedef,可以这样写,typedef struct node{}NODE; 。在...
  • typedef的作用是为已有的数据类型定义一个新名字,其主要目的是为了我们在使用时能用这个更加清晰简单的新名字,还有一个目的就是为了简化变量的声明。 下面的几段代码具有相同的功能,都是用于链表结构体节点的定义...
  • 问题描述 这就是一个结构体前置声明使用的问题,具体为: 1、在a.cpp里面定义了结构体如下: struct stA ...typedef struct stA* pstADef; void func(pstADef pst); 3、在main.cpp里面调用这个接...
  • typedef struct/union的理解

    千次阅读 2020-10-20 15:58:25
    然后说说typedef的格式,以typedef struct为例。 typedef struct "3、此处可以添加一些内容" { "1、此处可以添加一些内容" }"2、此处可以添加一些内容" 上面描述了typedef struct有3个地方可以加入我们自定义的...
  • OK,这里面的使用了typedef关键字,node就是替代了struct node的意思,而Node则代表了struct node*的意思,他指针指向了整个结构体 当你创建的是node T时,只能用T.data来表示数据 当你用Node指针创建时,Node T就...
  • #define dPS struct s * typedef struct s * tPS

    千次阅读 2014-08-04 19:32:02
     typedef struct s * tPS;  以上两种情况的意图都是要定义dPS 和 tPS 作为一个指向结构s指针。哪种方法更好呢?(如果有的话)为什么?  这是一个非常微妙的问题,任何人答对这个问题(正当的原因)是...
  • c语言规范,定义结构体:typedef struct ANSWER_HEADER { u8 u8Type; u8 u8Code; u32 u32TimeStamp; struct ANSWER_HEADER *pNext; }ANSWER_HEADER_T, *PANSWER_HEADER_T;ANSWER_HEADER为结构名,这个名字主要是...
  • 编程题时遇见的,放到这记录并与同类型的比较讨论,提高自己编程的思路 以下是那个编程题 // str dx.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include<...struct S p=data[1...
  • 结构体指针,malloc,typedef

    千次阅读 2017-12-28 11:33:21
    如何定义结构体类型?创建结构体类型变量,结构体指针变量 #include <stdio.h> #include <...typedef struct { int ab; }aaa_t; int main() { aaa_t *var1; aaa_t var2; var1=(aaa_...
  • struct student{};struct student a;...而typedef struct student{}a;其中的a 只是结构体struct的一个类型别名,就是给这种数据类型起一个别的名字 typedef struct LNode {  ElemType data; ...
  • 结构体定义 typedef struct 用法详解和用法小结

    万次阅读 多人点赞 2018-04-03 14:08:04
    这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)。 在编程中使用typedef目的一般有两个,一个是给变量提供一个易记且意义明确的新名字(类型有新别名,方便变量的定义),另一个是...
  • typedef介绍

    万次阅读 多人点赞 2019-08-21 17:18:48
    typedef为C语言的关键字,作用是为一种数据类型定义一个新名字,这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)。 typedef本身是一种存储类的关键字,与auto、extern、static、...
  • 一、structtypedef struct区别 1)在C中定义一个结构体类型要用typedef: typedef struct Student {  int a;  }Stu; // 写法1 于是在声明变量的时候就可:Stu stu1;(如果没有typedef就必须用struct Student...
  • typedef struct BiTNode{ char data; struct BiTNode *lchild,*rchild; }BiTNode,*BiTree; //先序建立二叉树 BiTree CreateBiTree(){ char ch; BiTree T; scanf("%c",&ch); if(ch=='#')T=NULL; else{ T = ...
  • 【C语言】typedef struct node{}a,*b;到底是什么意思?

    万次阅读 多人点赞 2020-04-06 12:55:33
    也知道typedef struct node{xxx}b;的意思是将这个结构体命名为b;但是对于这样的代码 typedef struct Node { int value1; int value2; }*p,a; 确不知道这两个表示的什么。首先我们先明确一个typedef最基本的定义 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 244,967
精华内容 97,986
关键字:

struct后面的指针typedef