use*_*966 6 c struct pointers typedef declaration
我是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;
Run Code Online (Sandbox Code Playgroud)
我这样得到一个错误,只是无法理解为什么.
我知道,edgeitem并且edge是标签,我可以使用struct edge *next,但我声明了指针那为什么我不能用呢?
如果我有指针,我需要使用*吗?
pEDGE_ITEM *edge_item
//or
pEDGE_ITEM edge_item
Run Code Online (Sandbox Code Playgroud)
我不明白,这是一个指针,为什么我要添加*?
最后一个问题是:如果我使用上述内容,有什么区别:
*EDGE next
EDGE *next
Run Code Online (Sandbox Code Playgroud)
最后一个:如果我要补充:
typedef struct edge_list
{
EDGE *head;
}EDGE_LIST;
Run Code Online (Sandbox Code Playgroud)
是这样的:
pEDGE head;
Run Code Online (Sandbox Code Playgroud)
bet*_*ido 10
您不能在结构的定义中使用pEDGE.你应该这样做:
typedef struct edge {
pEDGE_ITEM *edge_item;
struct edge *next; //pointer to next edge
struct edge *prev; //pointer to prev edge
} EDGE, *pEDGE;
Run Code Online (Sandbox Code Playgroud)
你还必须注意这edge_item是一个双指针.你也在你的问题中提到了这一点.因此,如果您使用pEDGE_ITEM并且您只想要一个普通的指针,那么您不应该pEDGE_ITEM *edge_item只是写pEDGE_ITEM edge_item.
为澄清,以下所有声明均相同:
struct edgeitem *edge_item;
EDGE_ITEM *edge_item;
pEDGE_ITEM edge_item;
Run Code Online (Sandbox Code Playgroud)
但
pEDGE_ITEM *edge_item;
Run Code Online (Sandbox Code Playgroud)
相当于
struct edgeitem **edge_item;
EDGE_ITEM **edge_item;
Run Code Online (Sandbox Code Playgroud)
关于*EDGE next那是错误的语法.正确的语法是EDGE* next或pEDGE next.所以一旦struct edge定义了你就可以使用这两个中的任何一个,但是在定义结构时,你必须按照我在答案开头展示的那样做.
是的,以下两个定义是等效的:
typedef struct edge_list {
EDGE *head;
} EDGE_LIST;
typedef struct edge_list {
pEDGE head;
} EDGE_LIST;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
24714 次 |
| 最近记录: |