c语言导入函数指针 c函数传递指针

C语言——指向函数的指针

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)

C语言中如何将指针作为参数带入函数,没然在函数中转为数组,一一对应,谢谢啊

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的数组,这个跟编译器有点关系

C语言中的函数指针

函数指针是指向函数的指针变量。 因而“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。

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是一个指针变量,不像函数名称那样是死的,它可以指向任何函数,就看你想怎么做了。在程序中把哪个函数的地址赋给它,它就指向哪个函数。而后用指针变量调用它,因此可以先后指向不同的函数。不过注意,指向函数的指针变量没有++和--运算,用时要小心。

指针函数是指返回值是指针的函数,即本质是一个函数。我们知道函数都有返回类型(如果不返回值,则为无值型),只不过指针函数返回类型是某一类型的指针。

其定义格式如下所示:

返回类型标识符*返回名称(形式参数表)

{ 函数体}

返回类型可以是任何基本类型和复合类型。返回指针的函数的用途十分广泛。事实上,每一个函数,即使它不带有返回某种类型的指针,它本身都有一个入口地址,该地址相当于一个指针。比如函数返回一个整型值,实际上也相当于返回一个指针变量的值,不过这时的变量是函数本身而已,而整个函数相当于一个“变量”。

其实还是指针,只是指向的内容和声明方法不同而已

C语言调用函数指针

并不是不规范的问题,你子程序写法只能在子程序中输出正确的数据,而在主函数中无法得到交换过的x和y的值。参考程序运用指针让子程序去读写a和b的值,在子程序执行完成后,a和b的值确实得到了交换。

你的程序中子程序采用的不是指针类型参数,这样子程序无法将交换过后的值传回来。


文章标题:c语言导入函数指针 c函数传递指针
链接地址:http://azwzsj.com/article/ddjjeij.html