我正在练习创建链接列表,但在尝试将项目插入列表前面时遇到了问题。如果我把它放在main中,我的插入函数中的代码可以正常工作,但是当它作为函数单独运行时不能正常工作。
我在函数中使用指针作为参数,所以我不明白为什么我的print语句中的值没有变为100,应该使用insert函数在链接列表的前面(当我运行功能61打印,我的目标是100打印。)
感谢您的帮助!
def otherfn(codestr):
z = 2
locals_ = locals()
exec(codestr, globals(), locals_)
y = locals_["y"]
return y
otherfn(code)
答案 0 :(得分:0)
你传递一个指向节点的指针作为函数的参数,并且更改形参数的值不会改变实际参数的值,这样做应该有效。
enter code here
#include <stdio.h>
#include <stdlib.h>
typedef struct node *nodePtr;
typedef struct node node;
struct node {
int value;
nodePtr next;
};
void insert(node **first, int value)
{
nodePtr temp;
temp = malloc(sizeof(node));
temp->value = value;
temp->next = *first;
*first = temp;
}
int main()
{
nodePtr first;
first = malloc(sizeof(node));
first->value = 61;
first->next = NULL;
insert(&first, 100);
printf("%d",first->value);
}
答案 1 :(得分:0)
您已经传递了一个指向函数 insert()的指针并将其存储在变量 first 中,其范围是函数 insert()的本地。现在你有了 在函数 insert()中更新指针 first 。
当你将返回 main()函数时,指针 next 的更新值丢失,这就是你在main()中打印值时得到意外结果的原因。 / p>
总结:
first = malloc(sizeof(node)); // let's say first is p1
...
insert(first, 100); // first is P1
....
node insert(node *first, int value) // first is p1
....
tmp = malloc(sizeof(node)); // let's say tmp is p2
first = temp; // Now first has become p2 but its scope is local to insert()
....
printf("%d", first->value); // first is still p1 here
<强>解决方案强>
node* insert(node *first, int value)
{
nodePtr temp;
temp = malloc(sizeof(node));
temp->value = value;
temp->next = first;
first = temp;
return first;
}
int main()
{
nodePtr first;
first = malloc(sizeof(node));
first->value = 61;
first->next = NULL;
first = insert(first, 100);
printf("%d", first->value);
return 0;
}