我在谭浩强的C程序设计里面看到的一道题
练习函数指针作为参数的,有这么一个例题:
#include "stdafx.h"
int max(int a,int b)
{
if(a>b)
{
return a;
}
else
{
return b;
}
}
int min(int a,int b)
{
if(a<b)
{
return a;
}
else
{
return b;
}
}
int add(int a,int b)
{
return a+b;
}
int fun(int x,int y,int (*p)(int,int))
{
return (*p)(x,y);
}
int _tmain(int argc, _TCHAR* argv[])
{
int max(int,int);
int min(int,int);
int add(int,int);
int a=13,b=22,n;
printf("please choose 1,2 or 3");
scanf("%d",&n);
int fun(int x,int y,int (*p)(int,int));
if(n==1)
{
printf("%d",fun(a,b,max));
}
if(n==2)
{
printf("%d",fun(a,b,min));
}
if(n==3)
{
printf("%d",fun(a,b,add));
}
}
函数就不用解释了,我的问题是,为什么要用指针呢?谭浩强的书上也说了可以不用指针,但是对于函数个数多的话,指针会很方便,我又写了一个不用指针的C程序:
#include "stdafx.h"
int max(int a,int b)
{
if(a>b)
{
return a;
}
else
{
return b;
}
}
int min(int a,int b)
{
if(a<b)
{
return a;
}
else
{
return b;
}
}
int add(int a,int b)
{
return a+b;
}
int _tmain(int argc, _TCHAR* argv[])
{
int max(int,int);
int min(int,int);
int add(int,int);
int a=13,b=22,n;
printf("please choose 1,2 or 3");
scanf("%d",&n);
if(n==1)
{
printf("%d",max(a,b));
}
if(n==2)
{
printf("%d",min(a,b));
}
if(n==3)
{
printf("%d",add(a,b));
}
}
明显不用指针的程序代码比用指针的代码还少,根本就不是指针更简便,既然不用指针会有更少的代码,为什么还用指针?我知道是为了可以控制内存,但是这道题里,用指针明显是更麻烦的。为什么谭浩强在这道题说指针更简便?
也就是说这里根本不需要指针是吧
追答动态内存需要用到指针。
被调用的函数,要使传入的参数的值的变化能够作用在上级函数中,那么,需要指针保存该变量的地址,以对其操作。
小程序功能简单,又不需要考虑内存开销,用不了多少C语言高级点的功能。