我只是測試一個鏈接的鏈接。但是,向列表中插入元素並且該列表應該是引用類型後,傳遞給函數GetElement()的列表地址不是預期的。我只是不明白爲什麼。C++爲什麼指針值改變了?
這是我的主要程序:
#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參數「表」()更換一次進入該功能。
您應該使用一類具有一個構造函數,'的malloc()'應避免在C++中,還當你路過,你可以使用引用代替指針 – 2015-04-01 02:29:41
值你複製。傳遞給你的函數時,你已經複製了整個LinkList。你應該通過引用來代替。 – OmnipotentEntity 2015-04-01 02:29:53
使用typedef隱藏指針會使代碼更難讀取和維護。另外,爲什麼'malloc'而不是'new'?而且,爲什麼要在'main'中動態分配? – PaulMcKenzie 2015-04-01 02:29:59