c ++链表奇怪的Helpp?

时间:2017-02-03 08:29:14

标签: c++ data-structures struct linked-list

我的代码在这里:

#include <iostream>
using namespace std;

struct Mhs
{
int nim;
char nama[10];
Mhs *next;
};

void fs(Mhs *m)
{
m = m->next;
}

int main()
{
int i;
Mhs mhs[2] = { {1, "Alice", &mhs[1]}, {2, "Bob", &mhs[0]} };
Mhs *m = &mhs[0];
fs(m);
for(i = 0; i < 2; i++)
{
   cout << m->nama << ":" << m->nim << " ";
   m = m->next;
}
cout << endl;
return 0;
}

为什么输出是: 爱丽丝:1鲍勃:2 但已经执行了函数fs()

但是,如果我删除fs(m);并替换m = m-&gt; next;然后输出将是这样的: 鲍勃:2爱丽丝:1

有什么不同????????

2 个答案:

答案 0 :(得分:1)

void fs(Mhs * m)表示您正在为另一个变量分配另一个指针。喜欢你的情况

Mhs *m = &mhs[0];
Mhs *m1 = m; // fs(m); <<<<<< 
m1 = m1->next; // <<<<<<<<<
for(i = 0; i < 2; i++)
{
   cout << m->nama << ":" << m->nim << " ";
   m = m->next;
}

与您的代码相同。

这里你使用相同的变量作为函数参数(m),但c ++明智的是它是不同的变量。

要获得效果,您可以按照以下方式执行此操作:

void fs(Mhs **m)
{
    *m = (*m)->next;
}

Passing a pointer to a linked list in C++

答案 1 :(得分:0)

请检查此代码

struct Mhs
{
    int nim;
    char nama[10];
    Mhs *next;
};

void fs(Mhs **m)
{
    *m = (*m)->next;
}

int main()
{
    int i;
    Mhs mhs[2] = { {1, "Alice", &mhs[1]}, {2, "Bob", &mhs[0]} };
    Mhs *m = &mhs[0];
    fs(&m);
    for(i = 0; i < 2; i++)
    {
        cout << m->nama << ":" << m->nim << " ";
        m = m->next;
    }
    cout << endl;
    return 0;
}