我想找到第一个链表。我有个主意。
我将在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 :(
感谢您的帮助:)
答案 0 :(得分:1)
您的类型不匹配。你取消引用temp->messages->firstm
所以它是struct message的类型。 messages
是结构消息的指针类型,&(temp->messages)
是一个指针(但指向指针的指针)。
将所有特殊操作数保留在您遇到问题的行之外。
答案 1 :(得分:0)
我认为这就是你想要实现的目标(你可以检查here它是否有效,你只需要一个C99编译器):
#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;
}