关于C语言程序的理解问题,涉及函数调用以及结构体指针(链表)请大家帮忙理解下

说明①:typedefstructg_node{double(*g)(double*);g_node*next;}g_node;}//定义结构体类型为g_node说明②:... 说明①:typedef struct g_node
{
double (*g) (double *);
g_node *next;}g_node;
}
//定义结构体类型为g_node
说明②:g_node *g_function;//其初始值NULL
说明③:定义了3个函数,g1(double *),g2(double *),g3(double *)
说明④:要输入三个函数入口地址,即调用三次下面的函数
body.Add_g(g1);
body.Add_g(g2);
body.Add_g(g3);

下面是要调用的函数
Add_g(double (*p)(double*)) //通过调用3个函数,形成链表
{
g_node *node,*temp1,*temp2;
temp1 = g_function;
temp2 = temp1;
while(temp1!=NULL){
temp2 = temp1;
temp1 = temp1->next;}
node = new g_node;
node->g = p;
node->next = NULL;
if(temp1 == g_function)
g_function = node;
else
temp2->next = node;
}

我把对程序的执行分析如下:
①g函数指针变量指向g1时:
1)temp1==temp2==g_function=NULL
2)while循环不执行
3)开辟第一个结点空间,并将g1函数入口地址通过形参p传给 g,即node->g=p
/*Add_g(double (*p)(double*))*/ 然后node->next=NULL
4)执行if语句,将第一个结点地址赋给g_fuction,即g_function = node;
②g函数指针变量指向g2时:
1)执行两个赋值语句有,temp1==temp2==g_function //都指向第一个结点的地址
2)执行while循环语句,temp1=temp1->next ???????//我的理解是将NULL赋给temp1 ??????????
3)开辟第二个结点空间,并将g2函数入口地址通过形参p传给 g,即node->g=p
/*Add_g(double (*p)(double*))*/ 然后node->next=NULL
4)执行else语句 ???????????/////////我的理解是,将第二个结点地址赋给前面temp2->next,即temp2->next指向第二个结点。注意此时temp2里的第二个成员next是第一个结点地址,不是NULL,下面将g3地址给函数指针变量g时,会不会出现问题?

③g函数指针变量指向g时:
1)先执行temp1 = g_function;后执行temp2 = temp1,此时temp1和temp2都指向了第一个结点
2)执行while循环,此时执行temp1 = temp1->next;就是使temp1指向第二个结点
3)开辟第三个结点空间,
2)执行while循环语句:并将g3函数入口地址通过形参p传给 g,即node->g=p
/*Add_g(double (*p)(double*))*/ 然后node->next=NULL
3)执行else语句将第三个结点地址给temp2->next

至此建立链表 ///这里有问题吧?链表怎么就建立了
是不是没有构成链表啊,急啊
展开
 我来答
qimingxingwen
2011-12-22 · TA获得超过432个赞
知道小有建树答主
回答量:269
采纳率:50%
帮助的人:184万
展开全部

呵呵,我不是很会这个问题。但是你的这个出现逻辑错误了吧(如果我说错了请见谅)。你的g-func在进入时指向了一个结点(或者原先为空而新建的结点),然后你的目的是t1t2往后移动,逐个添加,可是你每次都是把t1赋值g-func这样以来你的t1t2又被指向了那个初始位置,所以应该只是在保留第一个函数的基础上添加第二个,然后添加的第三个又覆盖第二个,第四个覆盖第三个,一直这样下去,最终只添加了两个结点。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式