您的位置:首页 > 其它

关于指向指针的指针的问题

2013-03-29 21:22 369 查看
最近为了完成《编译原理》课程设计作业,我写了一个针对token的链表,代码如下(部分):

#ifndef __TOKENLINKLIST__CPP__

#define __TOKENLINKLIST__CPP__

#include "tokenLinkList.h"

#include <iostream>

TokenLinkList::TokenLinkList() {

head = new TokenNode();

len = 0;

currentNode = head;

}

TokenLinkList::~TokenLinkList() {

clear();

delete head;

head = 0;

}

TokenNode* TokenLinkList::getElement(int pos) const {

TokenNode* tmpNode = head;

int count = 0;

while(pos > count) {

tmpNode = tmpNode->next;

count ++;

}

return tmpNode;

}

Status TokenLinkList::insert(char*data,TokenType tokenType) {

TokenNode* newNode = new TokenNode(data,tokenType);

if(newNode == 0) {

return StackOverflow;

}

if(len <= 0) {

head->next = newNode;

}

currentNode->next = newNode;

currentNode = newNode;

len ++;

return Success;

}

Status TokenLinkList::remove(int pos) {

if(pos > len || pos <= 0) {

return RangeError;

}

TokenNode* tmpNode = getElement(pos-1);

TokenNode* deleteNode = tmpNode->next;

tmpNode->next = deleteNode->next;

if(pos == len) {

//删除的是最后一个元素

//currentNode->next = tmpNode;

currentNode = tmpNode;

}

delete deleteNode;

deleteNode = 0;

len --;

return Success;

}

int TokenLinkList::length() const {

return len;

}

Status TokenLinkList::getElem(int pos,TokenNode** tokenNode) const {

if((pos > len) || (pos < 1)) {

return RangeError;

}

TokenNode* tmpNode = getElement(pos);

*tokenNode = tmpNode;

return Success;

}

Status TokenLinkList::setElem(int pos,char* data,TokenType tokenType) {

if((pos > len) || (pos < 1)) {

return RangeError;

}

TokenNode* tmpNode = getElement(pos);

tmpNode->data = data;

if(tokenType != Unsure) {

tmpNode->tokenType = tokenType;

}

return Success;

}

void TokenLinkList::clear() {

int tmpLen = len;

for(int tmp = 0; tmp < tmpLen; tmp++) {

remove(len-tmp);

}

}

void TokenLinkList::traverse(void(*visit)(char*,TokenType)) {

TokenNode* tmpNode = head;

while(tmpNode = tmpNode->next) {

visit(tmpNode->data,tmpNode->tokenType);

}

}

void TokenLinkList::debug() {

cout<<head->next->data;

}

#endif

之前在写remove()这个函数的时候,因为要取得TokenNode这个指针的值,我在remove函数参数里面使用了指向指针的指针,然后取得它的值,代码如下:

tokenNode = &tmpNode;

然而,在使用的时候一直取不到具体的数值,很郁闷,到底是错在那儿了?

后面请教了吕广奕之后才知道,tokenNode只是一个变量,那么修改形参的值,实参不会发生任何改变,那么调用的时候自然也得不到正确的结果~~

后面修改为:

*tokenNode = tmpNode;

OK,搞定了~~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: