精华内容
下载资源
问答
  • 结构体structtypedef后面指针的含义

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

    在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;
    }


    展开全文
  • 所以,}后面的Lnode和*LinkList都是struct Lnode的别名,使用别名的目的就是为了让结构体更方便于理解和控制,以后在使用的时候就很方便了。 比如创建一个头指针,没有别名之前的写法是: struct Lnode .
    1. struct和typedef struct彻底明白了
    2. typedef struct LNode *list和struct LNode有什么区别
    3. typedef在C中叫做声明别名,就是说同种事物的另外一个称谓,而C的别名代表的是typedef后面定义的所有内容,别名会写在最后。所以,}后面的Lnode*LinkList都是struct Lnode的别名,使用别名的目的就是为了让结构体更方便于理解和控制,以后在使用的时候就很方便了。
    • 比如创建一个头指针,没有别名之前的写法是:
      struct Lnode *head = (struct Lnode *)malloc(sizeof(struct Lnode));
    • 现在有了别名,别名把struct Lnode给取代了,所以现在的写法变成了:
      Lnode *head = (Lnode )malloc(sizeof(Lnode));
      因为LinkList也是结构体的别名,所以也可以写成
      LinkList head = (LinkList)malloc(sizeof(*LinkList));
      两种别名也可以混合使用的,比如:
      LinkList head = (LinkList)malloc(sizeof(Lnode));
    展开全文
  • 前者是宏声明,此后dPS等价于后面的struct s*;后者是定义,此后tPS作为一个指针可以被使用;
    前者是宏声明,此后dPS等价于后面的struct s*;
    后者是定义,此后tPS作为一个指针可以被使用;
    展开全文
  • typedef structstruct

    2013-08-11 19:53:00
    要写一个单向链表的节点,后面还要用到这个结构体来定义节点或节点的指针变量 就用typedef来为这个结构体起一个方便的别名 LinkList,后面再用时就可以方便地像用普通类型如int int* 来定义相应类型的变量了 ...

    要写一个单向链表的节点,后面还要用到这个结构体来定义节点或节点的指针变量

    就用typedef来为这个结构体起一个方便的别名 LinkList,后面再用时就可以方便地像用普通类型如int int* 来定义相应类型的变量了

    typedef struct Node
    {
    int num;
    Node *next;
    }LinkList;

    如果不写成上面的形式,那么:

    1)

    struct Node
    {
    int num;
    Node *next;
    }LinkList;

    只定义了一个结构体变量LinkList,和上面的含义完全不同

    2)

    struct
    {
    int num;
    Node *next;
    }LinkList;

    省写了结构体的名称,也只是定义一个结构体变量

    转载于:https://www.cnblogs.com/aganlengzi/p/3251828.html

    展开全文
  • 而C的别名代表的是typedef后面定义的所有内容,别名会写在最后,所以,}后面的Lnode和*LinkListdou’shi都是struct Lnode的别名,使用别名的目的就是为了让结构体更方便于理解和控制,以后在使用的时候就很方便了,...
  • 目录一、指针数组和数组指针3、...)1、如何使用typedef2、typedefstruct3、typedef 和 const4、typedef的好处五、二重指针 一、指针数组和数组指针 前面的是形容词,后面的才是主题。 1、字面意思来理解指针数组
  • 在数据结构中会看到: typedef struct QNode { QElemType data; //数据域 struct QNode *next;...关键在于后面的那个部分如何理解 就是QNode,*QueuePtr这两个如何理解; 可以这样来理解 typedef stru
  • 1、vs2013 使用string类型 #include using namespace std; 2.c++struct ...typedef struct listNode * list;//用list替换后面需要重复写的struct listNode struct listNode{ int val; listNode* pnext; }
  • 类型和struct相关。如果typedef后面有多个定义,我们可以逐个拆开。  typedef int *PInt, Int, **PPInt; 我们可以拆成: // typedef int *PInt; // typedef int **PPInt; // typedef int Int; #include #...
  • 而C的别名代表的是typedef后面定义的所有内容,别名会写在最后,所以,}后面的Lnode和*LinkList都是struct Lnode的别名,使用别名的目的就是为了让结构体更方便于理解和控制,以后在使用的时候就很方便了,比如创建...
  • 如何读懂这样一个c语言声明呢?该书作者认为c语言声明是c语言最为复杂的部分,甚至超过指针和数组。1、理解c语言声明的优先级规则A声明从它的...星号*表示“指向…的指针”C如果 const和(或) volatile关键字的后面...
  • 关于指针的指针

    2013-04-25 20:50:26
    注意下面代码是错,具体错误在后面解释。 #include #include //树数据结构 typedef struct BTreeNode{ char data; struct BTreeNode *lchild; struct BTreeNode *rchild; }BTreeNode,*BTree; //访问树...
  • c++obs中函数指针

    2020-07-12 21:48:46
    后面查了下是函数指针,下面就对typedef void (*Fun) (void)使用 理解。 typedef的用法 用途一 定义一种类型别名,而不只是简单宏替换。可以用作同时声明指针多个对象。 char* pa, pb; // 这多数不符合...
  • 今天学到了二叉树,一开始被那个malloc弄的很迷,后来发现root=(BiTreeNode*)malloc(sizeof(BiTreeNode))的那个星号是在后面的,吐血。。 代码里面有个小技巧,就是typedef struct XXX{...}XXX,这样就使用XXX代替了...
  • 12.关于结构体指针

    2018-01-03 09:06:31
    这次是想讨论一个关于结构体指针的问题,具体就是野指针 1.首先是关于结构体的问题,结构体可以简单看为一个自定义...上面定义了一个aa类型的变量p,后面定义了一个指向aa类型的指针pp, 可以将aa看作是int类型的变量类
  • RT_thread国产实时操作系统——字符串指针在使用到rt_...typedef struct _srudent { rt_uint16_t old; rt_uint16_t score; char sex; char *nume; } student; int main(void) { student student1; student *s
  • 单循环链表是C语言中比较常见一种链式储存结构。 相较于普通单链表,其特点就在于单循环链表指针指向是头结点。 即: 1.单链表 2. 单循环链表有点就在于方便访问第一...typedef struct Node* PNode; typ
  • 题意: 采用带头结点的单链表,设计一个算法将其就地逆置,所谓“就地”是指辅助空间O(1)。 这里可以有两种方法做: 1.头插法且双指针 2.改变指针指向且三指针 ...然后后面的链表元素,利用头插法,一个
  • 1. 使用struct来保存数据 2. 使用struct里面函数指针指向相应函数 ...// 不完整声明,方便后面函数指针类型变量定义 struct Person; typedef struct Person *PPerson; typedef void...
  • 以前一直纠结一个指针链表,用free函数释放一个地址,这个地址后面的东西会不会也没有了,终于是实在想不开来做一次实验了。 这个是代码: typedef struct Node { int data; Node *next; }Node; int main() {///...
  • typedef struct slist { int id; struct slist* next; }L; //创建一个节点 L* create_node(int data) { //给每个节点分配结构体一样空间大小 L* p = (L*)malloc(sizeof(L)); if (NULL == p) ...

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 169
精华内容 67
关键字:

struct后面的指针typedef