#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