簡體   English   中英

c中的指針類型轉換

[英]Pointer typecasting in c

我正在用C語言編寫圖形的實現。 我遇到了一種情況,我無法弄清編譯器表現出指針類型轉換警告的方式的原因。 這是結構;

#define MAXV 10 
typedef struct {
    int y;
    int weight;
    struct edgenode *next;
} edgenode;


typedef struct {
   edgenode *edge[MAXV+1];
   int degree[MAXV+1];
   // other info of graph
} graph;

// operation in some other function
p->next = g->edge[x];

進行此類操作時,出現指針類型轉換警告(默認情況下啟用)。

即使嘗試使用所有可能的演員表進行類型轉換,我也無法刪除此警告。
最終,我對結構進行了代碼更改,警告突然消失了。 結構代碼更改是這樣的:

typedef struct edgenode {   // note that I have added structure name here
    // same as above definition
} edgenode;

// operation in some other function
p->next = g->edge[x];

現在警告消失了,代碼運行時沒有任何警告。

我不明白為什么會這樣。 有人可以幫助我解決這個問題嗎?

問題在這里:

typedef struct {
    int y;
    int weight;
    struct edgenode *next;
} edgenode;

目前尚不清楚什么類型的struct edgenode *next; 是指(沒有關系;大概在某個地方定義了一個struct edgenode ),但是它不是這種結構,因為它沒有標簽。 你需要:

typedef struct edgenode
{
    int y;
    int weight;
    struct edgenode *next;
} edgenode;

現在,指針指向相同類型的另一個結構。 因此,您找到的修復是針對您問題的正確修復。

記住: typedef是現有類型的別名(替代名稱)。 您創建了一個類型名稱edgenode ,但尚未定義類型struct edgenode 在創建指向結構類型的指針之前,不必完全定義它。 這可能是創建“不透明類型”的好方法。

定義事物的另一種方法是:

typedef struct edgenode edgenode;

struct edgenode
{
    int y;
    int weight;
    edgenode *next;
};

這表示類型名稱edgenodestruct edgenode的別名; 然后,結構定義告訴編譯器struct edgenode外觀。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM