【发布时间】:2015-04-01 02:25:14
【问题描述】:
我只是测试一个链接。但是,在我向列表中插入元素后,不希望传递给函数 GetElement() 的列表地址,并且列表应该是引用类型。我就是不明白为什么。
这是我的主程序:
#include "stdafx.h"
#include <string>
#include <iostream>
typedef struct Node
{
int data;
struct Node *next;
} Node;
typedef struct Node *LinkList;
void InsertElement(LinkList *header, int i, int e)
{
LinkList p = *header;
int j = 0;
while (p && j < i)
{
p = p->next;
j++;
}
if (!p || j > i)
return;
Node newNode;
newNode.data = e;
newNode.next = p->next;
p->next = &newNode;
}
void GetElement(LinkList list, int i, int *value)
{
LinkList p = list->next;
int j = 1;
while (p && j < i)
{
p = p->next;
j++;
}
if (!p || j >= i)
return;
*value = p->data;
}
int _tmain(int argc, _TCHAR* argv[])
{
LinkList header = (LinkList)malloc(sizeof(Node));
header->next = NULL;
InsertElement(&header, 0, 1);
int res = -1;
GetElement(header, 1, &res);
}
我在调试时发现函数GetElement()中的参数“list”一进入函数就改变了。
【问题讨论】:
-
你应该使用带有构造函数的类,
malloc()在 C++ 中应该避免使用,你也可以使用引用而不是指针 -
当你通过值传递时,你会复制。传递给您的函数时,您已经复制了整个 LinkList。您应该通过引用传递。
-
使用 typedef 隐藏指针会使代码更难阅读和维护。另外,为什么
malloc而不是new?更进一步,为什么要在main开始动态分配?
标签: c++ pointers struct linked-list