C語言中類型轉(zhuǎn)換不匹配的解決方案
錯誤示范:
#include<stdio.h>
#include<stdlib.h>
typedef struct HFTNode
{
int data;
struct HFTNode *lchild,*rchild;
}HFTNode,*HFTree;
int main()
{
HFTree root=NULL;
root = (HFTree)malloc( sizeof(HFTNode) );
root->data = 1;
root->lchild = NULL;
root->rchild = NULL;
printf("%d \n",root->data);
HFTNode node = NULL;
node = (HFTree)root;
printf("%d \n",node.data);
return 0;
}原因:
上述代碼中,
HFTNode node = NULL;
這一行會出現(xiàn)類型不匹配的錯誤,原因在于:
此時HFTNode是一個結(jié)構(gòu)體類型(非指針類型),而 NULL通常被定義為 (void*)0,是一個空指針常量。
現(xiàn)試圖將一個指針值(NULL)賦給一個結(jié)構(gòu)體變量(node),這在 C 語言中是不允許的,因為它們的類型不兼容-> 修正方法如下:
如果想定義一個指向HFTNode的指針變量,應(yīng)該這樣寫:
HFTNode *node = NULL;
這樣 node就是一個指針,可以賦值為 NULL,也可以指向已經(jīng)分配的HFTNode 結(jié)構(gòu)體。
另外,在后面的 node = (HFTree)root; 中,如果 node已經(jīng)是指針類型,那么直接寫 node = root; 即可,因為 root也是 HFTree類型(即HFTNode*),無需強制類型轉(zhuǎn)換。
修改結(jié)果:
#include<stdio.h>
#include<stdlib.h>
typedef struct HFTNode
{
int data;
struct HFTNode *lchild,*rchild;
}HFTNode,*HFTree;
int main()
{
HFTree root=NULL;
root = (HFTree)malloc( sizeof(HFTNode) );
root->data = 1;
root->lchild = NULL;
root->rchild = NULL;
printf("%d \n",root->data);
HFTNode *node = NULL;
node = root;
printf("%d \n",node->data);
return 0;
}到此這篇關(guān)于C語言中類型轉(zhuǎn)換不匹配的解決方案的文章就介紹到這了,更多相關(guān)C語言 類型轉(zhuǎn)換不匹配內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C和C++中的基本數(shù)據(jù)類型的大小及表示范圍詳解
這篇文章主要介紹了C和C++中的基本數(shù)據(jù)類型的大小及表示范圍詳解,基本數(shù)據(jù)類型有int、long、long long、float、double、char、string,正文有詳細介紹,歡迎參考2018-01-01
c++ 頭文件<cwchar>中常見函數(shù)的實現(xiàn)代碼
本文記錄了c++ 頭文件<cwchar>中常見函數(shù)的實現(xiàn),本文結(jié)合實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧2023-12-12

