在指针a:
上使用if else语句时if(a==NULL)
....
else
.....
两者都被执行了。有人可以解释一下吗?
这里是使用malloc c / c ++函数实现dinamic列表的代码的一部分。
#include <iostream>
#include <cstdlib>
using namespace std;
struct simplelist {int v;struct simplelist *ptr;};
void push(simplelist &s,int value);
void printlist(simplelist &s);
int main()
{
struct simplelist list; list.ptr=NULL;
push(list,1); push(list,2); push(list,3); push(list,4);
int v=0; v=getsize(list); cout<<"size: "<<v<<endl;
return 0;
}
void push(simplelist &s,int v)
{
if (s.ptr==NULL)
{
s.v=v;
s.ptr=(simplelist *) malloc(sizeof(simplelist));
if(s.ptr==NULL) cout<<"out of memory"<<endl;
}
else
push(*s.ptr,v);
}
int getsize(simplelist &s)
{
int v=1;
if (s.ptr==NULL)
{
v--;
cout<<"getsize s.ptr=null"<<endl; //here bug?
} //program exec if and else statement
else
{
v=v+getsize(*s.ptr);
cout<<"getsize elsewere"<<endl;
}
return v;
}
我得到了输出:
getsize s.ptr=null
getsize elsewere
getsize elsewere
getsize elsewere
getsize elsewere
答案 0 :(得分:2)
您的功能只是以相反的顺序打印消息。 (第一条消息与最后一个元素相关,依此类推。)
else
{
v=v+getsize(*s.ptr);
cout<<"getsize elsewere"<<endl;
}
必须是
else
{
cout<<"getsize elsewere"<<endl;
v=v+getsize(*s.ptr);
}
答案 1 :(得分:1)
由于其递归结构,getsize()
为列表中的每个节点打印出一行。最后一个节点首先打印,并且是ptr
为NULL
的唯一节点。