0

ある種のツリーがあり、そのツリー内で本質的にnullである特定のノードを見つける必要がある場合(構造体はまだ初期化/mallocされていません)。

初期化できるように、その非常に具体的な初期化されていない構造体の場所を返したい場合は、次のようになります。

if (parentNode->childNode == NULL)
    return parentNode->childNode;

仕事?それともNULLを返しますか?代わりに親ノードを返す必要がありますか?

私が抱えている問題は、この特定のノードが複数の異なる構造体タイプの子である可能性があることです。ジェネリックスをサポートしていないため、Cでこれを克服する方法がわかりません。誰かアイデアはありますか?

4

4 に答える 4

1

NULLを返すことはできません。識別可能な場所にはなりません。

ただし、できることは次のとおりです。

  • mallocあなたがそれを見つけてmallocによって返されたポインタを返すポイントのノード、
  • 関数の呼び出し元が新しいノードに設定するために使用できるreturn &(parentNode->childNode)(childNodeポインターへのポインター)、または
  • return parentNode

ジェネリック医薬品によってその問題をどのように軽減できるかわかりません。

于 2012-10-21T23:34:31.200 に答える
0

それを返してparentNodechild他の場所で初期化することができます。

于 2012-10-21T23:36:52.087 に答える
0

NULLを返すことはできますが、意味がありません。値がNULLのポインターへのポインターを返すことができます。

typedef struct link {
        struct link *next;
        } LL;


LL **getTailPP(LL **ppHead)
{
    for( ; *ppHead; ppHead = &(*ppHead)->next ) {;}
    return ppHead;
}
于 2012-10-21T23:41:58.673 に答える
0

子ノードがまだ初期化されていない場合、そのノードへのポインタを返すことはできません...まだ存在していないものへのポインタをどのように返すことができますか?

親ノードのポインタへのポインタを返す必要があります。このポインタは、子ノードに新しく割り当てられたメモリを指すように変更できます。

于 2012-10-21T23:43:38.830 に答える