typedefは新しい型を作成できないため、この部分は "struct tnode"宣言の部分ですか?したがって、上記では、typedef "Treenode"を作成し、 "struct tnode"を宣言していますか?ここでK&R 2E Typedef pg 146,147
return (Treeptr) malloc(sizeof(Treenode));
、TREENODEは全体の「構造体TNODE」宣言と同義であるから、はsizeofに全体の宣言を渡す必要があるか、1だけで行うことができます。structを経由して他の場所TNODEを宣言した後はsizeof(構造体TNODE) tnode {...};
typedef struct tnode *Treeptr;
typedefは次のとおりです。typedef old-existing-type newtype;だからここに.. struct tnode *はすでに存在していなければならない古い型です(別の場所で宣言しなければなりません)。そしてTreeptrはその同義語です。同様に:typedef struct tnode * Treeptr;
typedef int (*PFI)(char *, char *);
ここでは何が起こっていますか?古い型はintで(* PFI)(char 、char)はintの同義語ですか? int(* PFI)(char *、char *)が古い型の場合、新しい型は何ですか? 「実際にtypedefは#defineのようなものですが、コンパイラによって解釈されるので、プリプロセッサの能力を超えたテキスト置換に対処できます」と言ってどういう意味ですか?上記の例では、なぜプリプロセッサは何が行われているのですか?
オブジェクト指向のおかげ:関数ポインタを使用するための
コードサンプル:
今、あなたは(パラメータ/変数として使用する場合)の代わりに
int (*)(char *, char *)
のEDITをPFIを使用することができます! typedef int(* PFI)(char *、char *)は自動的にPFI #defineを作成し、PFI foo barを実行すると#define(マクロ)のように変換されますto:int(* PFI)(foo、bar) –
いいえ、タイプ定義として定義しました...申し訳ありませんが、明確ではないため、修正します。 – MByD
@MByD小さなコードでPFIを使用する方法を説明できますか? – Dubby