C 编程为链表类型结构分配空间
Posted
技术标签:
【中文标题】C 编程为链表类型结构分配空间【英文标题】:C programming allocating space for a linked list type structure 【发布时间】:2022-01-02 05:46:15 【问题描述】:您好,我刚开始尝试在 C 中实现某种列表,只是为了尝试学得更好。我目前没有代码,只是需要一些假设的帮助
#define MAX_LIST_SIZE 1024
typedef struct clist clist;
struct clist
clist *next;
char *data;
void add_to_list(char *str, clist *current)
//what code goes in here
im guessing some sort of malloc adding the strlen of str plus the sizeof the clist
int main()
clist mylistofstrings;
如果你能回答这个问题,我的下一个问题是,有没有办法使用宏或其他东西来改变结构,这样你就可以添加如下字符串
clist mystrings = ADDSTRING("add this");
ADDTOLIST(mystrings,"second string");
【问题讨论】:
您需要分配一个节点 (struct clist
),但不需要复制字符串。你可以复制指针
你能给我一个代码示例吗,如果我想让 clist->data 指向一个字符串,我在哪里为字符串分配空间
我只是说不需要分配任何东西,你需要做的就是复制指针(clist->data = str;
)
对不起,我对 C 很陌生,所以我意识到这对你来说可能是非常基础的。我可以继续添加链接的列表并尽可能多地添加新字符串。 clist->data = str , clist->next->data = str , clist-next->next->data = string
不,您需要分配这些节点。再说一遍,已经说过了。这不是 C 特定的。每种语言都是一样的。
【参考方案1】:
有趣的是,您必须注意一些要点:
如果您要传递对您的链表的引用:
-
您需要首先为堆中的每个节点分配结构。避免堆栈粉碎。
您甚至可能不得不 malloc 字符串,再次避免堆栈粉碎。
然后,您必须将每个节点相互链接。
如果您只是为了好玩而这样做,并且您不打算将对您的结构的引用传递给不同的函数。那么你就不需要使用malloc了。直接初始化它们。
【讨论】:
以上是关于C 编程为链表类型结构分配空间的主要内容,如果未能解决你的问题,请参考以下文章