C++問題在這裏。我已經成功(經過一番研究:P)爲一堆整數創建了一個鏈表實現。我在修改char *的時候遇到了一些麻煩......從鏈接列表中檢索字符
我認爲這可能只是一個問題,與我在下面定義的linklistCommands類使用的函數有關的引用/取消引用指針。 (我一直無法理解什麼時候使用&或*與參數和返回值有關。)我已經評論了我的代碼中可能混淆的行。
不管怎麼說,這裏是我的代碼至今:
struct linkc { // one 'link', stores a pointer to a char array
char * value;
linkc *next;
};
class linklistCommands
{
public:
linklistCommands()
{top = NULL;}
~linklistCommands()
{}
void push(char * address) // Pretty sure I'm OK here.
{
linkc *temp = new linkc;
temp->value = address;
temp->next = top;
top = temp;
}
char* pop() // Pretty sure I have to change something on this line
{
if (top == NULL)
return 0;
linkc * temp;
temp = top;
char * value;
value = temp->value;
top = temp->next;
delete temp;
return value;
}
bool isEmpty()
{
if (top == NULL)
return 1;
return 0;
}
private:
linkc *top;
};
int main(void)
{
// pushed strings are of an arbitrary, but always known, length
char[4] stringA = "foo";
char[6] stringB = "fooba";
char[8] stringC = "foobar ";
linklistCommands commandList;
commandList.push(stringA);
commandList.push(stringB);
commandList.push(stringC);
while(commandList.isEmpty!=1)
{
cout << (*commandList.pop()) << endl;
}
}
感謝您在我的問題和/或任何澄清您可以提供:)
請注意,如果你的stringA,stringB等超出範圍(它們不會在主體中,但它們可能會在另一個函數中聲明),它們將在任何地方停止存在(以及它們可能會也可能不會,這取決於你的程序正在做的基本上不相關的其他事情),並且如果它們稍後彈出,你的堆棧將返回垃圾。使用std :: string會阻止這一點。 – Brilliand 2012-03-10 08:04:55
啊。 StringA,stringB不是我實際代碼的一部分,而只是在那裏放置。至於我的實際變量,我正在管理那些從未被超出範圍的內存。 – zedadex 2012-03-10 10:35:56
chac,我可以/不應該在C++中使用char [N]嗎?我在那裏輸入char [N]只是爲了表明字符串長度可以變化,但長度是已知的,但我的實際代碼沒有將字符串初始化爲它們的最終值 - 它們相當於在時間,從一個循環。 – zedadex 2012-03-10 10:38:06