0

I'm new on StackOverflow so sorry if this topic was already discussed.

I'm working on a project, and I need to use the minimum amount of memory, so my question is: is it possible to access the adres of node of a structure by having the adress of a field of this structure. For example I have this structure:

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

somewhere in my code I obtain the adress of id... so it is possible to get the adress of whole node by using adress of id?

4

4 回答 4

0

是的,你可以得到它。只要您为此结构提供内存,就会为此保留一个内存块。该块将为 char、int 和 SLL 类型的三个指针具有连续的内存位置。如果您知道指向第二个元素的指针,那么只需从中减去 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 回答
0

是的,您可以,因为该结构是连续存储的。您的问题与指针算术有关。整个节点的地址(结构指针的值)是(SLL*)(id - sizeof (name))。

于 2013-05-02T00:37:49.497 回答
0

通常,结构的地址与第一个成员的地址相同。

但是,这取决于编译器(我认为。不要引用我的话。说真的。),并且您可能出于我不理解的原因将填充字节添加到结构中,但希望能注意到是否有经验丰富的人对此发表评论,解释原因:V

您最好的选择是从 (int* id) 的内存地址中减去 sizeof(char*)。

于 2013-05-02T00:38:31.097 回答