Vriesianman 2020-05-04 23:21 采纳率: 0%
浏览 95

结构体指针中的知识混淆

对于'.'和'->'的使用,以及是否'*'有混淆

最近在学数据结构,但是对于代码中定义的结构体和结构体指针的使用总是
不清晰,不知道什么时候用
1.A.xx            例子中判空操作
2.A->xx        例子中二叉树创建
3.( \*A)->xx  例子中二叉树初始化处
4.(\*A).xx      例子中结点人队
希望大佬帮忙求解一下。下面是附上的例子。

例子:

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define OVERFLOW -1

typedef char ElemType;
typedef int Status;
//二叉树的二叉链表存储表示
typedef struct BiTNode{
    ElemType data;
    struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;

typedef struct QNode{
    BiTree Qdata;
    struct QNode *next;
}QNode,*QueuePtr;

typedef struct{
    QueuePtr front;
    QueuePtr rear;
}LinkQueue;
//二叉树初始化       (对应(*A)->xx)
Status InitBiTree(BiTree *T){
    (*T)=(BiTree)malloc(sizeof(BiTNode)); 
    printf("初始化函数中:%d",sizeof(*T));
    if(!(*T)) exit(OVERFLOW);
    //(*T)->data=NULL;//是否需要初始化data中的值 
    (*T)->lchild=NULL;
    (*T)->rchild=NULL;
    return OK; 
} 
//二叉树创建       (对应A->xx)
Status CreateBiTree(BiTree &T){
    char ch=getchar();
    if(ch=='.') 
        T=NULL;
    else{
        T=(BiTree)malloc(sizeof(BiTNode));
        T->data=ch;
        CreateBiTree(((T)->lchild));
        CreateBiTree(((T)->rchild));
    }
    return OK;
}
//结点入队       (对应(*A).xx)
Status EnQueue(LinkQueue *Q,BiTree e)
{
    QueuePtr p=(QueuePtr)malloc(sizeof(QNode));
    if(!p) exit(OVERFLOW);
    p->Qdata=e;
    p->next=NULL;
    (*Q).rear->next=p;
    (*Q).rear=p;
    return OK;
}
//判断是否队列为空       (对应 A.xx)
Status QueueEmpty(LinkQueue Q)
{
    if(Q.front==Q.rear){
        return TRUE;
    }else{
        return FALSE;
    }
} 

如果可以在说明下函数的参数何时选择&T,何时选择*T就更好了。感谢大佬

  • 写回答

2条回答 默认 最新

  • 穆暖阳 2020-05-05 09:31
    关注

    指针才可以用-> 结构体要用.

    评论

报告相同问题?

悬赏问题

  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置