关于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
至此建立链表 ///这里有问题吧?链表怎么就建立了
是不是没有构成链表啊,急啊 展开
{
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
至此建立链表 ///这里有问题吧?链表怎么就建立了
是不是没有构成链表啊,急啊 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询