C ++链表奇怪的帮助



我的代码在这里:

#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->next; 那么输出将是这样的:鲍勃:2 爱丽丝: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;
}

在C++中传递指向链表的指针

请检查此代码

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;
}

最新更新