資料型別struct Node與Node的使用問題

2021-10-21 23:17:36 字數 1472 閱讀 6756

問題修正

問題分析與總結

c++中結構體的定義

在pat**做題目「02-線性結構1 兩個有序鍊錶序列的合併 (15 分)」時,遇到了**編譯錯誤的問題。

題目只允許使用c語言。

typedef struct node *ptrtonode;

struct node ;

typedef ptrtonode list; /* 定義單鏈表型別 */

list merge(list l1, list l2)

else

}if (p1) //將剩下的一段加入鍊錶l

編譯錯誤:unknown type name 『node』

根據提示,node不能作為一種資料型別,應該使用list或struct node。

list merge(list l1, list l2)

else

}if (p1) //將剩下的一段加入鍊錶l

為何原**在vs2019中可以編譯通過,而在pat上卻顯示編譯錯誤?

原因在於c和c++語言中對結構體的定義要求略有不同。由於pat對於本題限制使用c語言,故出現編譯失敗的問題。

下面具體看看c和c++語言中結構體如何定義(以鍊錶結點為例)。

struct node

;

那麼要宣告這種結構體的變數,必須要這樣寫:

struct node ***;
也就是說,每次必須在前面加上「struct」。

有沒有更加簡便的方法呢?

用typedef給這種結構定義一種型別名

typedef struct node

mynode;

現在你擁有了一種新的型別,叫做mynode,可以用它定義變數:

mynode ***;
在c++中,struct和class本質上都是類,就不用寫typedef了,直接定義即可:

struct node

;

在宣告結構物件時,也不須加上關鍵字「struct」了。

node ***;
同時c++也支援c的方式,struct node ***;node ***;是相同的。

SQL SERVER資料型別與C 資料型別對照表

sql server型別 c 型別 精確數字 bigint 從 2 63 9223372036854775808 到 2 63 1 9223372036854775807 的整型資料 所有數字 儲存大小為 8 個位元組。int64 int從 2 31 2,147,483,648 到 2 31 1 2...

SQL SERVER資料型別與C 資料型別對照表

sql server 型別 c 型別 精確數字 bigint 從 2 63 9223372036854775808 到2 63 1 9223372036854775807 的整型資料 所有數字 儲存大小為 8 個位元組。int64 int 從 2 31 2,147,483,648 到2 31 1 2...

SQL SERVER資料型別與C 資料型別對照表

sql server 資料型別與 c 資料型別對照表 sql server型別 c 型別 精確數字 bigint 從 2 63 9223372036854775808 到 2 63 1 9223372036854775807 的整型資料 所有數字 儲存大小為 8 個位元組。int64 int從 2 ...