我在寫一個程序,它在c中實現了一個堆棧。我希望每個節點採取任何類型的數據(即INT炭結構等),如果我聲明我的節點結構作爲堆棧中使用的C中的無效指針
typedef struct node{
void *data;
struct node *next;
}Node;
這是否讓我的空指針數據指向任何類型的內存?
我在寫一個程序,它在c中實現了一個堆棧。我希望每個節點採取任何類型的數據(即INT炭結構等),如果我聲明我的節點結構作爲堆棧中使用的C中的無效指針
typedef struct node{
void *data;
struct node *next;
}Node;
這是否讓我的空指針數據指向任何類型的內存?
是的,但有些警告涉及取消引用您的void指針來訪問裏面的數據。
基本上,說你有一個節點:
Node *node;
而且你有一些Point結構:
typedef struct Point {
int x;
int y;
} Point;
,你把一個點中的一個節點:
Point *p = malloc(sizeof(Point));
p->x = 0;
p->y = 3;
node->data = p;
在爲了訪問該點的成員,您必須使用類型轉換:
printf("%d\n", ((Point *)node->data)->x);
或者你也可以指定正確類型的指針,複製無效指針:
Point *p = node->data;
printf("%d\n", p->x);
因爲這是行不通的:
printf("%d\n", node->data->x);
這是因爲一個空指針不包含爲編譯器提供類型信息,以便了解void指針指向的內容。
這幾乎是所有你需要知道如何使用void指針。
這是否允許我的虛指針數據指向任何類型的內存?
是的。
簡而言之,是的。這意味着你會存儲一個指向int
等的指針,這樣就佔用了空間。如果列表中沒有同類型,則還需要確保知道如何處理不同的類型。
是的,它可能是你想達到的目標,但你需要照顧取消引用無效指針。我所指的是你必須在取消引用時鍵入caste無效指針到適當的類型。