zenghonghao
2015-12-05 15:26
采纳率: 36.4%
浏览 2.2k

c++关于数组指针赋值问题

这段赋值语句

下面这段语句是错的
void setArc(char start, char end)
{
int i;
for(i=0;i<Vexnum;i++)
{

        if(vex[i].ch == start)
        {
            while(vex[i].next)
            {
                vex[i] = *vex[i].next;
            }
            ArcNode *nNode = new ArcNode;
            nNode->ch = end;
            vex[i].next = nNode;
        }
    }
}

我改了一下,变成下面这段语句,为什么执行不会出问题?
void setArc(char start, char end)
{
    int i;
    for(i=0;i<Vexnum;i++)
    {

        if(vex[i].ch == start)
        {
            ArcNode *thisnode = &vex[i];
            while(thisnode->next)
            {
                thisnode = thisnode->next;
            }
            ArcNode *nNode = new ArcNode;
            nNode->ch = end;
            thisnode->next = nNode;
        }
    }
}

源代码
#include<iostream>

using namespace std;
#define Max 100
class ArcNode{
public:
ArcNode *next;
char ch;
ArcNode()
{
next = NULL;

}

};
class List{
private:
int Bownum;
int Vexnum;
ArcNode *vex;
public:
List(int n, int k)
{
Vexnum = n;
Bownum = k;
vex = new ArcNode[Vexnum];
ArcNode *spare = new ArcNode();
int i;
for(i=0;i<n;i++)
vex[i].ch = 'A'+i;
}
void setArc(char start, char end)
{
int i;
for(i=0;i<Vexnum;i++)
{

        if(vex[i].ch == start)
        {
            ArcNode *thisnode = &vex[i];
            while(thisnode->next)
            {
                thisnode = thisnode->next;
            }
            ArcNode *nNode = new ArcNode;
            nNode->ch = end;
            thisnode->next = nNode;
        }
    }
}
void display()
{
    int i;
    for(i=0;i<Vexnum;i++)
    {
        cout<<i<<' ';
        cout<<vex[i].ch<<'-';
        ArcNode *tNode = &vex[i];
        tNode = tNode->next;
        while(tNode)
        {
            cout<<tNode->ch-'A'<<'-';
            tNode = tNode->next;
        }
        cout<<'^'<<endl;
    }
}

};
int main()
{

int t;
cin>>t;
while(t--)
{
int n, k;
cin>>n>>k;
List mylist(n, k);
while(k--)
{
char ch1, ch2;
cin>>ch1>>ch2;
mylist.setArc(ch1, ch2);

    }
    mylist.display();
}
return 0;

}

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • ysuwood 2015-12-06 00:18
    已采纳

    数组vex是存放了各个链表的头节点吧,那么在循环中vex[i] = *vex[i].next;,就把头结点的next变为结尾了,
    破坏了链表。
    第二种用的是临时指针,则不会破坏链表结构。

    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • devmiao 2015-12-05 15:29
    评论
    解决 无用
    打赏 举报
  • ysuwood 2015-12-05 15:49

    这两种没什么区别,怎么会有错误?
    你运行出什么错误了?

    评论
    解决 无用
    打赏 举报
  • ysuwood 2015-12-05 15:57

    哦,是有区别,对象赋值时,改变了vex[i]

    vex[i] = *vex[i].next; //这是两个对象赋值
    
      thisnode = thisnode->next; //这是指针赋值
    
    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题