1

構造内の自己参照ポインタと構造へのポインタの違いは何ですか?

    struct abc
    {
    int data;
    struct abc *next;
    }
    struct abc *pt;
  1. *nextとの違いは何*ptですか??

  2. 使い方の違いは??

私は本当にこれらの2つの間に疑問を抱いています

私は初心者です

最初の例は、主に連結リストに使用されます

構造体ノードへのポインタと自己参照ポインタは同じものですか?

参照してください

see-programming.blogspot.in/2013/05/chain-hashing-separate-chaining-with.html ここでは、配列として struct hash *hashTable を使用しました..どのように?? *ptでも同じことができますか

4

5 に答える 5

4
  1. それらは同じタイプです。それらはまったく同じように動作します。

    使用例:

    // declare 2 structs
    struct abc s1;
    struct abc s2;
    
    // point pt to s1
    pt = &s1;
    
    // point s1.next to s2
    s1.next = &s2;
    
    // access pt->data
    int a = pt->data;
    
    // access s1.next->data
    int a = s1.next->data;
    
  2. 使用方法の違い:

    • pt変数は 1 つだけです。

    • すべてstruct abcの変数には、next変数があります。

    リンクされたリストのコンテキストでは、ヘッド ポインターは 1 つしかないため、ptそれになります。
    ただし、各ノードは次のノードを指しているnextため、これに使用する必要があります。

  3. ポインターを配列として使用しますか?

    ptはい、これは または のいずれかで実行できますnext

    ポインターは、メモリ内のアドレスを指すだけです。その場所で相互に続く構造体はいくつでも存在できます。

    それを配列として使用したい場合 (または単にポインタを一般的に使用したい場合)、メモリを割り当てていない要素にアクセスしようとしないことを確認する必要があります (mallocたとえば)。使用法(使用した場合malloc)。

    配列の使用例:

    // declare a struct
    struct abc s1;
    
    // make an array of size 10
    struct abc *a1 = malloc(10*sizeof(struct abc));
    
    // give the 4th element a new value
    a1[4] = s1;
    
    // free the memory
    free(a1);
    

それが少し役立つことを願っています。

于 2013-08-26T19:47:19.193 に答える
1

唯一の違いは、コンパイラを作成する人に適用されます。これは、自己参照ポインターは、それ自体が完全に宣言される前に自分自身を参照するためです。したがって、コンパイラを作成する人は、この特殊なケースに対処する必要があります。

プログラマー (つまり、あなた) として、違いはなく、用語に追加の意味はありません。

于 2013-08-26T20:04:33.697 に答える
1

概念的には、ほとんど違いはありません。

  1. next指しているのと同じ構造体のメンバーです。 pt指している構造体のメンバーではありません。
  2. これらは同様の方法で使用されますが、使用nextするには既存の があり、struct abc直接pt使用できる点が異なります。考えてください:
    myABC.next= &myOtherABC ;
    pt= &myOtherABC ;

構造ノードへのポインタと自己参照ポインタは同じものです

彼らはそうであり、そうではありません。視点によります。どちらも構造を指しているからですそれらは、 a が任意の構造体を指すことができるためではなく、変数として、パラメーター、ローカル変数、別のメンバーなどにすることができます。 .pointer to structurestructself referential pointerstructstruct

于 2013-08-26T19:55:47.483 に答える
0
  1. それらは同じ型ですが、同じ値を含んでいません

  2. pt は next を含む構造体を指しているため、pt から next にアクセスできます。しかし、次からptにアクセスできなくなります。

リンクされたリストの場合、リストには最初の1つの要素が含まれていることを理解する必要があり、この要素はリストの次の要素に到達する方法を知っています。これは次のポインターの目標です

于 2013-08-26T19:58:31.060 に答える