【发布时间】:2017-07-21 17:06:41
【问题描述】:
我正在使用指针编写一个小程序, 这是我的代码:
#include<iostream>
using namespace std;
struct number
{
int data;
number *next;
} test;
number * last_node(number *head)
{
number *temp = new number;
temp = head;
while (temp->next != nullptr)
{
temp = temp->next;
}
return temp;
}
void insert_at_end (number *head)
{
number *temp = new number;
number *last = new number;
last = last_node(*head);
cout<<"Enter the data";
cin>>temp->data;
temp->next = nullptr;
last->next = temp;
}
void view_all (number *head)
{
number *temp = new number;
temp = head;
while (temp->next != nullptr)
{
cout<<temp->data;
temp = temp->next;
}
}
int main()
{
number *head = &test;
int choice;
char ans = 'y';
do
{
cout<<"Enter your choice";
cout<<"\n 1. Insert ";
cout<<"\n 2. View ";
cout<<"\n 3. Exit ";
cin>>choice;
switch (choice)
{
case 1 : insert_at_end(head);
break;
case 2 : view_all(head);
break;
case 3 : goto label;
default : cout<<"You have entered wrong choice";
}
cout<<"Do you want the menu again ? (y/n)" ;
cin>>ans;
}
while (ans = 'y');
label:
return 0;
}
在编译时,在调用函数'last_node(*head)'时说不能将“number”转换为“number*”时出现错误。
你能帮我正确理解吗?
【问题讨论】:
-
operator*用于取消引用,因此如果head是number*那么*head是number -
在
last = last_node(*head);中,您正在取消引用head,并传递number,而last_node预计会收到number*。此外,您在以下语句number *temp = new number; temp = head;中泄漏内存(因为您覆盖了指向新分配的number的指针)。考虑阅读good C++ book。