我的代码在这里:
#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
有什么不同????????
答案 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;
}
答案 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;
}