我必须编写此程序,但我无法在功能主中进行任何更改, 当Node * head声明为全局变量时,此程序有效(函数不包含" Node * head"在参数中)。 这个程序编译成功,但后来是分段错误(我知道为什么,Head没有改变,它仍然是0,但我不知道如何解决)。有什么想法吗?
#include <iostream>
#include <cstdlib>
using namespace std;
struct Node{
int val;
Node* next;
};
void addBeg(Node* head,int val)
{
Node* temp = (Node*)malloc(sizeof(Node));
temp->val=val;
temp->next=head;
head=temp;
}
int main()
{
Node* head=0;
addBeg(head,1);
cout << head->val << endl; //checking if head was changed correctly
return 0;
}
答案 0 :(得分:2)
如果要更改函数内部的指针,请发送“指针指针”,例如:
#include <iostream>
#include <cstdlib>
using namespace std;
struct Node{
int val;
Node* next;
};
void addBeg(Node** head,int val) // Node** instead of Node*
{
Node* temp = (Node*)malloc(sizeof(Node));
temp->val=val;
temp->next=*head;
*head=temp; // *head instead of head
}
int main()
{
Node* head=0;
addBeg(&head,1); // &head instead of head
cout << head->val << endl; //checking if head was changed correctly
return 0;
}
修改强>
或者只使用指针的参考参数:
void addBeg(Node* &head,int val)
{
Node* temp = (Node*)malloc(sizeof(Node));
temp->val=val;
temp->next=head;
head=temp;
}
答案 1 :(得分:0)
如果您要修改它,则需要通过引用传递头指针。其他任何东西都需要修改main()
,这显然是禁止的:
改变这个:
void addBeg(Node* head, int val)
对此:
void addBeg(Node*& head, int val) // NOTE: see reference &
也就是说,您应该使用new
,而不是malloc
,理想情况下使用标准容器,例如std::vector<>
,std::list<>
,std::deque<>
而不是,但这与这个问题无关。