gpt4 book ai didi

c - C 链表的问题

转载 作者:行者123 更新时间:2023-11-30 16:39:53 24 4
gpt4 key购买 nike

我有一个函数可以将结构插入到以链表形式实现的队列中。我正在传递一个数组元素作为进程。

void q_insert (queue *q, process p) {
printf("before insert attemp\n");
if (q->head == NULL) {
q->head = malloc(sizeof(struct Node));
q->head->process = &p;
q->head->next = NULL;
q->tail = q->head;
printf("After insertion into empty\n");
}
else {
struct Node* temp;
temp = malloc(sizeof(struct Node));
temp->process = &p;
temp->next = NULL;
q->tail->next = temp;
q->tail = temp;
printf("after insertion into non empty\n");
}
}

当我第一次在空列表上调用此函数时,它似乎工作正常。当我尝试插入第二个项目时,它会添加第二个条目,但它也会用第二个条目的副本替换第一个条目。这些是使用的结构:

typedef struct {
char name[80];
int arrival_time;
int execution_time;
int priority; // high number is high priority
} process;

struct Node{
process* process;
struct Node* next;
} q_node;

typedef struct {
struct Node* head;
struct Node* tail;
} queue;

最佳答案

C 仅支持按值传递,当您通过指针传递变量的地址时,变量传递的地址的副本,并在您的插入中 函数 当 q == NULL 时,您正在分配内存并将该内存分配给 q,但这不会改变 q > 在你的函数之外:只有q内部你的函数的副本会被改变。

为了更改参数 q 指向,并将这些更改反射(reflect)在函数外部,您需要将一个指针传递给这样的指针:

void q_insert (struct node **q, process p) {
if (q->head == NULL) {
struct node* new_head = (struct node*)malloc(sizeof(struct node));
new_head->head->next = NULL;
.
.
*q=new_head;
.
.
}

关于c - C 链表的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46880303/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com