0

私は StackOverflow を初めて使用するので、このトピックが既に議論されていたら申し訳ありません。

私はプロジェクトに取り組んでおり、最小量のメモリを使用する必要があるため、私の質問は次のとおりです。この構造体のフィールドのアドレスを持つことで、構造体のノードのアドレスにアクセスすることは可能ですか? たとえば、私はこの構造を持っています:

typedef struct SLL{
    char *name;
    int *id;
    struct SLL *next;
    }SLL;

私のコードのどこかでIDのアドレスを取得しています...したがって、IDのアドレスを使用してノード全体のアドレスを取得することは可能ですか?

4

4 に答える 4

0

はい、入手できます。この構造体にメモリを与えるとすぐに、メモリ ブロックはこれのために予約されます。そのブロックには、char、int、SLL 型の 3 つのポインタの連続したメモリ位置があります。2 番目の要素へのポインタを知っている場合は、これから sizeof(char*) を減算して、この構造体のベース位置 (または最初の要素) に到達します。

于 2013-05-02T05:59:27.540 に答える
0

考慮してくださいoffsetof <stddef.h>

typedef struct SLL{
    char *name;
    int *id;
    struct SLL *next;
    }SLL;

int main()
{
   SLL *p=malloc( sizeof(SLL));
   void *id=&p->id;
   void *test= id - offsetof(SLL, id);
   printf("SLL=%p  test=%p\n", p, test);
   return 0;

}    
于 2013-05-02T00:47:22.057 に答える