大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
c语言中叫做回调函数,将函数指针(如max)作为函数的参数,函数(如fun)中调用这个参数指向的函数,
创新互联专注于吉林网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供吉林营销型网站建设,吉林网站制作、吉林网页设计、吉林网站官网定制、重庆小程序开发服务,打造吉林网络公司原创品牌,更为您提供吉林网站排名全网营销落地服务。
调用函数(fun)时看情况而给函数传入不同的函数指针
例如fun(a,b,min),那么fun函数调用执行三个参数就调用min函数
参数的定义要与传入的函数指针相匹配
例如fun(int,x,int y,(*p)(int,int)) 那么调用fun(a,b,min)时,min的参数必须是(int ,int)
float* twoorderS(float *xt) //将*写在靠近返回值类型名后,*对返回值的限定不是函数,函数是没有类型的
{
int i;
float b[number-2];
float one[number-1];
for(i=0;i(number-1);i++)
{
one[i]=xt[i]; //以下标形式访问指针,简化代码
if(i 1)
b[i-1]=one[i]-one[i-1]; //滞后一步,节省空间
}
return b; //数组b作右值时为数组首元素的地址,就是指针(和指针形式一样)
}
我把代码给简化了,并去掉了打印函数,你好好看看。你的程序没有问题,但是关键问题是你计算的数值都是Double型的,你的函数的变量在栈中存不了那么多,发生溢出,那程序就会出错。我没有你这个程序的全部代码,没法检测,你可以把double都改为int,估计可以在多算两个。
如果你真想用double并想算的数大,就使用malloc()函数给指针在堆中分配内存,结束时用free()释放就行了,当然这个前提是你对指针很熟悉,不让你很容易出错!
还有,楼上说数组的问题。数组这样在DEV C++上定义没有问题,但是换到VS2008就说不能分配常量大小为0的数组,这个跟编译器有点关系
函数指针是指向函数的指针变量。 因而“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。
int func(int x); /* 声明一个函数 */
int (*f) (int x); /* 声明一个函数指针 */
f=func; /* 将func函数的首地址赋给指针f */
赋值时函数func不带括号,也不带参数,由于func代表函数的首地址,因此经过赋值以后,指针f就指向函数func(x)的代码的首地址。
注2:函数括号中的形参可有可无,视情况而定。
下面的程序说明了函数指针调用函数的方法:
例一、
#includestdio.h
int max(int x,int y){ return(xy?x:y); }
void main()
{
int (*ptr)(int, int);
int a,b,c;
ptr=max;
scanf("%d%d",a,b);
c=(*ptr)(a,b);
printf("a=%d,b=%d,max=%d",a,b,c);
}
ptr是指向函数的指针变量,所以可把函数max()赋给ptr作为ptr的值,即把max()的入口地址赋给ptr,以后就可以用ptr来调用该函数,实际上ptr和max都指向同一个入口地址,不同就是ptr是一个指针变量,不像函数名称那样是死的,它可以指向任何函数,就看你想怎么做了。在程序中把哪个函数的地址赋给它,它就指向哪个函数。而后用指针变量调用它,因此可以先后指向不同的函数。不过注意,指向函数的指针变量没有++和--运算,用时要小心。
指针函数是指返回值是指针的函数,即本质是一个函数。我们知道函数都有返回类型(如果不返回值,则为无值型),只不过指针函数返回类型是某一类型的指针。
其定义格式如下所示:
返回类型标识符*返回名称(形式参数表)
{ 函数体}
返回类型可以是任何基本类型和复合类型。返回指针的函数的用途十分广泛。事实上,每一个函数,即使它不带有返回某种类型的指针,它本身都有一个入口地址,该地址相当于一个指针。比如函数返回一个整型值,实际上也相当于返回一个指针变量的值,不过这时的变量是函数本身而已,而整个函数相当于一个“变量”。
其实还是指针,只是指向的内容和声明方法不同而已
并不是不规范的问题,你子程序写法只能在子程序中输出正确的数据,而在主函数中无法得到交换过的x和y的值。参考程序运用指针让子程序去读写a和b的值,在子程序执行完成后,a和b的值确实得到了交换。
你的程序中子程序采用的不是指针类型参数,这样子程序无法将交换过后的值传回来。