#1 - 2022-5-25 20:43
aquarium (至少,还活着。)
while循环一般的运行结果,不是应该和按照循环次数复制代码的得出结果一样吗...
然后...
下面这几行里的那个while,理论上是循环了4次,可是当我删掉这个while,复制了3次循环里的代码接在后面再次运行,理应一模一样的结果,完全不一样
到底发生了什么...
#include<iostream>
using namespace std;
struct list
{
int coe;
int pow;
struct list *next;
list(){coe=0;pow=0;next=NULL;}
};
list create(){list o;return o;}
int main()
{
list ini;
list *A=&ini;
list *tem=A;
int i=1;
while(i<21){
tem->coe=i++;tem->pow=i+1;tem->next=&create();cout<<tem->coe;tem=tem->next;
tem->coe=i++;tem->pow=i+1;tem->next=&create();cout<<tem->coe;tem=tem->next;
tem->coe=i++;tem->pow=i+1;tem->next=&create();cout<<tem->coe;tem=tem->next;
tem->coe=i++;tem->pow=i+1;tem->next=&create();cout<<tem->coe;tem=tem->next;
tem->coe=i++;tem->pow=i+1;tem->next=&create();cout<<tem->coe;tem=tem->next;}
tem=A;
for(int i=0;i<5;i++){cout<<tem->coe<<","<<tem->pow<<endl;tem=tem->next;}
system("pause");
return 0;
}
然后...
下面这几行里的那个while,理论上是循环了4次,可是当我删掉这个while,复制了3次循环里的代码接在后面再次运行,理应一模一样的结果,完全不一样
到底发生了什么...
#include<iostream>
using namespace std;
struct list
{
int coe;
int pow;
struct list *next;
list(){coe=0;pow=0;next=NULL;}
};
list create(){list o;return o;}
int main()
{
list ini;
list *A=&ini;
list *tem=A;
int i=1;
while(i<21){
tem->coe=i++;tem->pow=i+1;tem->next=&create();cout<<tem->coe;tem=tem->next;
tem->coe=i++;tem->pow=i+1;tem->next=&create();cout<<tem->coe;tem=tem->next;
tem->coe=i++;tem->pow=i+1;tem->next=&create();cout<<tem->coe;tem=tem->next;
tem->coe=i++;tem->pow=i+1;tem->next=&create();cout<<tem->coe;tem=tem->next;
tem->coe=i++;tem->pow=i+1;tem->next=&create();cout<<tem->coe;tem=tem->next;}
tem=A;
for(int i=0;i<5;i++){cout<<tem->coe<<","<<tem->pow<<endl;tem=tem->next;}
system("pause");
return 0;
}
error: taking address of temporary [-fpermissive]
tem->next = &create();
在你的代码里面,list create()返回的是一个局部变量的拷贝,位置应该是在栈上,其生命在你对其取地址并赋值到变量里就已经结束了,在这之后的任何形式的使用其内容都不保证结果,后续的任何代码调用都可能会覆盖上面那个局部变量的拷贝所在的内存位置