加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

typedef结构指针定义

发布时间:2020-12-16 02:58:48 所属栏目:百科 来源:网络整理
导读:我是C中的新手,并且在所有指针内容方面都存在一些问题. 我写了这段代码: typedef struct edgeitem{ double weight;}EDGE_ITEM,*pEDGE_ITEM; //also declaration of a pointer/************ edge that includes a pointer to the edge item,next and prev **
我是C中的新手,并且在所有指针内容方面都存在一些问题.

我写了这段代码:

typedef struct edgeitem
{
    double          weight;
}EDGE_ITEM,*pEDGE_ITEM; //also declaration of a pointer

/************ edge that includes a pointer to the edge item,next and prev ******/
typedef struct edge
{
    pEDGE_ITEM  *edge_item;  
    pEDGE       *next;      //pointer to next edge
    pEDGE       *prev;      //pointer to prev edge
}EDGE,*pEDGE;

我这样得到一个错误,只是无法理解为什么.

我知道edgeitem和edge是标签,我可以使用struct edge * next但是我声明了指针所以为什么我不能使用它们?

如果我有指针,我需要使用*吗?

pEDGE_ITEM *edge_item
//or
pEDGE_ITEM edge_item

我不明白,这是一个指针,为什么我要添加*?

最后一个问题是:
如果我使用上面的内容,有什么区别:

*EDGE  next
EDGE  *next

最后一个:
如果我要补充:

typedef struct edge_list
{
    EDGE        *head;
}EDGE_LIST;

是这样的:

pEDGE      head;

解决方法

您不能在结构的定义中使用pEDGE.你应该这样做:
typedef struct edge {
    pEDGE_ITEM          *edge_item;  
    struct edge         *next;      //pointer to next edge
    struct edge         *prev;      //pointer to prev edge
} EDGE,*pEDGE;

您还必须注意edge_item是一个双指针.你也在你的问题中提到了这一点.因此,如果您使用pEDGE_ITEM并且您只想拥有一个普通指针,则不应该编写pEDGE_ITEM * edge_item而只需编写pEDGE_ITEM edge_item.

为澄清,以下所有声明均相同:

struct edgeitem *edge_item;
EDGE_ITEM *edge_item;
pEDGE_ITEM edge_item;

pEDGE_ITEM *edge_item;

相当于

struct edgeitem **edge_item;
EDGE_ITEM **edge_item;

关于* EDGE接下来是错误的语法.正确的语法是EDGE * next或pEDGE next.因此,一旦定义了struct edge,你就可以使用这两者中的任何一个,但是在定义struct时,你必须按照我在答案开头展示的那样做.

是的,以下两个定义是等效的:

typedef struct edge_list {
    EDGE        *head;
} EDGE_LIST;

typedef struct edge_list {
    pEDGE        head;
} EDGE_LIST;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读