将结构的地址分配给C中的其他结构

将结构的地址分配给C中的其他结构,c,pointers,struct,C,Pointers,Struct,我想找到链接列表的第一个。我有个主意 我将使用struct中的第一个地址。我无法创建first或somemockup结构,因为我将多次使用此函数 这些是我的结构: typedef struct user user; typedef struct message message; struct message { int id; int user; message *next; message *firstm; }; struct user { char n

我想找到链接列表的第一个。我有个主意

我将使用struct中的第一个地址。我无法创建first或somemockup结构,因为我将多次使用此函数

这些是我的结构:

typedef struct user user;
typedef struct message message;
struct message
{
    int id;
    int user;
    message *next;
    message *firstm;
};
struct user
{
    char name[10];
    int id;
    message *messages;
    user *next;
};
我添加用户和ID。没关系。 我想添加这样的用户消息(不是2d数组或类似的东西)

我会这样说:

firstme = &(temp->messages->firstm);
for (; temp->messages->next != NULL; temp->messages = temp->messages->next){}
temp->messages->firstm = firstme;
temp->messages->next = NULL;
没关系。我取了第一个消息结构的地址

但在那之后,我想在中使用它,因为我想全部打印

for (temp->messages = (temp->messages->firstm); temp->messages->next != NULL; temp->messages = temp->messages->next){}
但这不起作用

&(temp->messages) = *(temp->messages->firstm) //<- that doesn't work too :(
(temp->messages) = *(temp->messages->firstm) //<- that doesn't work too :(

&(temp->messages)=*(temp->messages->firstm)//您的类型不匹配。您取消了对
temp->messages->firstm的引用,因此它属于struct message类型<代码>消息
是指向结构消息的指针类型,
&(temp->messages)
是指向指针的指针


将所有特殊操作数保留在有问题的行之外

我认为这就是您想要实现的目标(您可以检查它是否工作,您只需要一个C99编译器):

#包括
typedef结构用户;
typedef结构消息;
结构消息
{
int-id;
int用户;
信息*下一步;
信息*firstm;
};
结构用户
{
字符名[10];
int-id;
信息*信息;
用户*下一步;
};
内部主(空){
//初始化somme伪结构
用户[4]={
{.name={0}}
};
消息msgs[4]={{0};
对于(int i=0;i<4;i++){
msgs[i].firstm=&msgs[0];
msgs[i].next=&msgs[i+1];
msgs[i].id=i;
用户[i]。消息=&msgs[0];
用户[i]。下一步=&用户[i+1];
}
msgs[4].next=NULL;
用户[4]。下一步=NULL;
//在第一个用户和打印ID中遍历消息
用户*temp=&用户[0];
对于(message*firstme=temp->messages->firstm;
firstme->next!=NULL;
firstme=firstme->next){
printf(“%d\n”,firstme->id);
}
返回0;
}

您是否将最后一个结构“next”成员设置为空?你是什么意思?它不工作,它不打印任何东西?我设置了,但我没有在这里写。你对给出的答案不满意吗?我怎么能理解。我只是想做一名助教<代码>结构点偏心={1,1};结构点*offCentreAddress=&offcenter;从Center2到OffcenterReadAddress的结构点
temp->messages=temp->messages->firstm;它与for循环中的这一行非常相似:temp->messages=temp->messages->nextIf i assing类似于firstme=temp->messages->firstm;下一个我会输。正因为如此,我必须查一下地址。这没有道理。字段firstm、messages和next是指针——它们是地址;temp->messages->firstm->next=NULL:(
#include <stdio.h>

typedef struct user user;
typedef struct message message;
struct message
{
    int id;
    int user;
    message *next;
    message *firstm;
};

struct user
{
    char name[10];
    int id;
    message *messages;
    user *next;
};

int main(void) {
    //initialize somme dummy structures
    user users[4] = {
        {.name = {0} }
    };
    message msgs[4] = {{0}};

    for (int i = 0; i < 4; i++) {
        msgs[i].firstm = &msgs[0];
        msgs[i].next = &msgs[i+1];
        msgs[i].id = i;
        users[i].messages = &msgs[0];
        users[i].next = &users[i+1];
    }
    msgs[4].next = NULL;
    users[4].next = NULL;

    //iterate through messages in first user and print ids
    user *temp = &users[0];
    for (message *firstme = temp->messages->firstm;
            firstme->next != NULL;
            firstme = firstme->next) {
        printf("%d \n", firstme->id );
    }

    return 0;
}