#include <stdio.h>
#include <stdlib.h>
typedef struct lista {
int val;
struct lista *next;
} lista;
void print(lista *head){
printf("List:");
while(head != NULL){
printf("%d; ", head->val);
head = head->next;}
}
void insert(lista *p,int v){
lista *novo;
if(p == NULL){
novo = malloc(sizeof(lista));
novo->val = v;
novo->next = NULL;
p = novo;}
else{
novo =malloc(sizeof(lista));
novo->val = v;
novo->next = NULL;
p->next = novo;
}
}
int main()
{
lista *head=NULL;
int v;
printf("Write the values u want to put in your list.(write 0 to exit)\n");
while (v != 0){
scanf("%d",&v);
insert(head,v);}
print(head);
}
-4
A
回答
1
您必须通过头指针的引用来编辑它在函数插入。 也许就像:插入(&头,V)和功能插入变化
void insert(lista **p,int v){
lista *novo;
if(*p == NULL){
novo = malloc(sizeof(lista));
novo->val = v;
novo->next = NULL;
*p = novo;}
else{
lista *head = *p;
while(head->next != NULL){
head = head->next;
}
novo =malloc(sizeof(lista));
novo->val = v;
novo->next = NULL;
head->next = novo;
}
}
它也许工作!
0
下面是一个简单的程序可以解释其平Ngyuyen提供的代码:
void
set_sp1(int **x) //line #3
{
int *i = malloc(sizeof(int)); //line #4
*i = 10000; //line #5
*x = i; //line #6
}
int
main(void)
{
int *pi1 = NULL; //line #1
set_sp1(&pi1); //line #2
printf("%d\n", *pi1); //line #7
return 0;
}
这里是说明:
线#1
PI1是指向整数是初始化为NULL。 这个说法是什么意思? 可以说pi1变量占用0XFFFF的内存地址。 pi1的值当前是一个NULL值。
因为它是一个指向整数的指针,所以pi1最终需要有一个值,它是一个整数的内存地址。
pi1
------------
| NULL |
------------
0XFFFF
线#2
该参数被发送PI1的地址。 所以。在这个例子中,它就像set_sp1(0XFFFF);
线路#3
在收到此参数,类型变为双指针,因为单个指针的地址为int发送。 x的值是0XFFFF。
x
------------
| 0XFFFF |
------------
线#4
变量i是一个指针,指向一个整数。 我分配一个足够的内存整数。 可以说我的内存地址在0XAAAA。 内存分配地址是0XBBBB。 i的值是0XBBBB。 这是一件值得记住的重要事情。 变量i是局部变量。所以它将驻留在堆栈内存中。 在此函数结束时,堆栈内存应该被清除。 但是,0XBBBB在堆内存中。所以在函数结束时不会被消除。
i a memory for int
------------ ------------
| 0XBBBB | | |
------------ ------------
0XAAAA 0XBBBB
线#5 这一行解引用0XBBBB以存储在地址0XBBBB值10000。现在
--------
|10000 |
--------
0XBBBB
线#6 ,压轴,*(0xFFFF)时= 0XBBBB。 0XFFFF的值为NULL。 但现在它有0XBBBB。
------------
| 0XBBBB |
------------
0XFFFF
再次,存储在0XBBBB的值是10000。
line#7 现在pi1的值不再是NULL,它有一个int的内存地址。 这与*(0XBBBB)是相同的,该值是在此存储器地址处具有值10000的值。
再次感谢Bing Nguyen提供的解决方案。 希望这个解释能让人更好的理解。
相关问题
- 1. 我的链接列表代码出现错误,任何人都可以帮助我检查哪里出错?
- 2. 任何人都可以帮我找到代码中的错误
- 3. 有人可以帮助我在列中的列排序代码
- 4. 帮助我找到错误
- 5. 任何人都可以帮助我解决我的JavaScript代码?
- 6. 任何人都可以帮助我优化我的代码吗?
- 7. 有人可以帮我找到我的IBM语音到文本代码中的错误/
- 8. 任何人都可以帮助我调试我的错误
- 9. 有人可以帮我我很困惑我的AngularJs代码
- 10. 有人可以帮助修复我的代码吗?
- 11. 有人可以帮我伪代码吗?
- 12. 在我的代码中找不到链接列表队列中的错误
- 13. 有人可以帮我解决我得到的错误吗?
- 14. 我无法找到我的SQL代码中的错误?
- 15. 需要帮助,我的代码有一个错误,我找不到
- 16. 有没有人可以帮助我?
- 17. 无法找到我的代码中的错误....分段错误
- 18. 运行时错误 - SIGABRT无法找到该错误帮助我
- 19. 我无法找到以下代码中的错误?
- 20. 有人可以用我的__gt__帮助我,并帮助我使用__radd__?
- 21. 我需要帮助看到我的错误与此代码
- 22. 有人可以帮助我,告诉我这段代码的含义吗?
- 23. 有人可以帮助我解决这个代码
- 24. 有人可以请帮助我一个for循环java代码
- 25. 有人可以帮助我使用此karel代码吗?
- 26. 有人可以帮我解决我的代码
- 27. 有人可以帮我用我的按钮游戏代码?
- 28. 有人可以帮我用我的冒险代码吗?
- 29. 有人可以帮我修复我的代码吗?
- 30. 有人可以帮我用我的循环代码
如果发生错误,输出记录中将出现一条错误消息,请查看。 –
问题是我无法打印列表。我不认为这是保存价值。 –
寻求调试帮助的问题(“为什么这个代码不工作?”)必须包含所需的行为,特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者无益。 – DyZ