user-0 提问: 高手啊，老鸟来帮我看看这代码怎么没有输出结果

回复:
user: user-1
content: 还差一级接口的调用呢？

user: user-2
content: #include<stdio.h> int main(void) {   int i=0,sum=0;   for(;i<=100;i++)     {        sum+=i;     }       printf("%d\n",sum);   return 0; }

user: user-3
content: 引用 5 楼 u010629326 的回复:   是我2了，加不加都行，我刚开始看到这种情况了，以为是需要加的，但是后面一想貌似函数名也能表示首地址。查资料发现这两种表达都行。 答案已经有朋友给出了，确实是没有调用输出函数。对于你这一题，我个人查看的方法：主函数中的p->AB();的返回值类型是func_AB*的，但是真正的打印函数是void类型的，返回值类型完全不一样，沿着结构体找下去会发现p->AB()只是指向的是一个已经初始化了的func_AB类型的结构体，并没有调用结构体中是输出函数。可能你的注释导致了一些误解。至于内存泄露的问题确实是需要后面优化的

user: user-4
content: int main() {                 factory_t *p = func_sel('A');//匹配函数                 if(p)                 {                                 p->AB()->factory_AB();//调用函数显示结果                                 p->CD()->factory_CD();//调用函数显示结果                 }                 return 0; }

user: user-4
content: int main() {                 factory_t *p = func_sel('A');//匹配函数                 if(p)                 {                                 p->AB()->factory_AB();//调用函数显示结果                                 p->CD()->factory_CD();//调用函数显示结果                 }                 return 0; }

user: user-0
content: 引用 1 楼 user-7 的回复:factory_t *p = func_sel('A');//匹配函数                 if(p)                 {                                 p->AB()->factory_AB();//调用函数显示结果                                 p->CD()->factory_CD();//调用函数显示结果                 }                 //内存释放呢？？？？？？？？？？？ 小程序，  引用 4 楼 theskyisblue 的回复:func_AB* func_a(void)//产品Ａ { 				func_AB* pa = (func_AB*)malloc(sizeof(func_AB)); 				pa->factory_AB = &factory_A;  //这里还有取址 				return pa; } func_AB* func_b(void) { 				func_AB* pb = (func_AB*)malloc(sizeof(func_AB)); 				pb->factory_AB = factory_B;  //怎么到了后面全没了 				return pb; } func_CD* func_c(void) { 				func_CD* pc = (func_CD*)malloc(sizeof(func_CD)); 				pc->factory_CD = factory_C; 				return pc; } func_CD* func_d(void) { 				func_CD* pd = (func_CD*)malloc(sizeof(func_CD)); 				pd->factory_CD = factory_D; 				return pd; } factory_t* func_sel(char name)//自定义组合 { 				factory_t* f = (factory_t*)malloc(sizeof(factory_t)); 				if( name == 'A') 				{ 								f->AB = func_a;  //这里应该都需要取地址吧 								f->CD = func_c; 				} 				else 				{ 								f->AB = func_b; 								f->CD = func_d; 				} 				return f; } 				 int main() { 				factory_t *p = func_sel('A');//匹配函数 				if(p) 				{ 								p->AB();//调用函数显示结果 								p->CD();//调用函数显示结果 				} 				return 0; }[/code][/quote] 谢谢你的回复，可是当我加上了＆，一样输不出结果，我下载个软件调试调试，谢谢回复

user: user-3
content: func_AB* func_a(void)//产品Ａ { 				func_AB* pa = (func_AB*)malloc(sizeof(func_AB)); 				pa->factory_AB = &factory_A;  //这里还有取址 				return pa; } func_AB* func_b(void) { 				func_AB* pb = (func_AB*)malloc(sizeof(func_AB)); 				pb->factory_AB = factory_B;  //怎么到了后面全没了 				return pb; } func_CD* func_c(void) { 				func_CD* pc = (func_CD*)malloc(sizeof(func_CD)); 				pc->factory_CD = factory_C; 				return pc; } func_CD* func_d(void) { 				func_CD* pd = (func_CD*)malloc(sizeof(func_CD)); 				pd->factory_CD = factory_D; 				return pd; } factory_t* func_sel(char name)//自定义组合 { 				factory_t* f = (factory_t*)malloc(sizeof(factory_t)); 				if( name == 'A') 				{ 								f->AB = func_a;  //这里应该都需要取地址吧 								f->CD = func_c; 				} 				else 				{ 								f->AB = func_b; 								f->CD = func_d; 				} 				return f; } 				 int main() { 				factory_t *p = func_sel('A');//匹配函数 				if(p) 				{ 								p->AB();//调用函数显示结果 								p->CD();//调用函数显示结果 				} 				return 0; }[/code][/quote]

user: user-5
content: 你只是赋值了函数指针，并没有执行输出的这几个函数嘛  预知程序如何执行，可以单步运行跟踪

user: user-6
content: 代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。

user: user-7
content: factory_t *p = func_sel('A');//匹配函数                 if(p)                 {                                 p->AB()->factory_AB();//调用函数显示结果                                 p->CD()->factory_CD();//调用函数显示结果                 }                 //内存释放呢？？？？？？？？？？？