Tôi khá mới trong C và có một số vấn đề với tất cả các công cụ con trỏ.typedef struct pointer definition
tôi đã viết mã này:
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;
tôi nhận được một lỗi theo cách này và chỉ không thể hiểu tại sao.
Tôi biết rằng edgeitem
và edge
là các thẻ và tôi có thể sử dụng struct edge *next
nhưng tôi đã khai báo các con trỏ sao cho tôi không thể sử dụng chúng?
Tôi có cần sử dụng * nếu tôi có con trỏ không?
pEDGE_ITEM *edge_item
//or
pEDGE_ITEM edge_item
Tôi không thể hiểu, đó là con trỏ tại sao tôi thêm *?
Và câu hỏi cuối cùng là:
*EDGE next
EDGE *next
và mới nhất:: Nếu tôi đang sử dụng ở trên, sự khác biệt giữa những gì nếu tôi nói thêm:
typedef struct edge_list
{
EDGE *head;
}EDGE_LIST;
là nó giống như:
pEDGE head;
Thông thường, nên bỏ dấu '*' phía sau typedef. Nó chỉ có thể dẫn đến sự nhầm lẫn. Các lập trình viên đọc * nhanh hơn pThing. Cũng vậy với các phần tử cú pháp khác, chẳng hạn như '#define AND &&', v.v. Trong ngắn hạn: không làm điều đó. – wildplasser