#include<iostream>
#include<conio.h>
#include<string>
#include<iostream>
#include<conio.h>
using namespace std;
#define OK 1;
typedef int Status;
typedef struct
{
string name;
float price;
}Book;
typedef Book ElemType;
typedef struct LNode
{
ElemType Elem;
LNode *Next;
}LNode,*List;
Status InitList( List &L)
{
L=new LNode();
L->Next=NULL;
return OK;
}
Status Q(List &tou,int n)
{
tou=new LNode();
while(n>=0)
{
List P=new LNode();
P->Next=tou->Next;
tou->Next=P;
n--;
}
return 0;
}
int main()
{
List tou;
Q(tou,4);
getch();
return 0;
}
我想测试链表中的前插法,Q函数就是完成的这个功能。
我的疑问是:
主函数中,Q(tou,4)表示生成一个头结点tou,后面接四个结点。
四个结点,由Q函数内容可以知道,结点名都是P。请问这样写,为什么能成功呢?
四个结点P,不就是4个重复变量了吗,变量是不能重复的啊!
每次调用Q,它内部的变量都是独立的,你可以在
List P=new LNode();
下面加上
printf("%p", P);
你会看到4个不同的指针。
再比如说
int sum(int n)
{
if (n == 0) return 0;
int p = sum(n - 1);
return p + n;
}
这个代码里面的p,显然是每次调用都有一个,所以才能递归起来。
如果是
int p;
int sum(int n)
{
if (n == 0) return 0;
p = sum(n - 1);
return p + n;
}
这么写,只有一个p了,程序肯定运行不正确。