c语言中用一个函数指针作为另一个函数的参数,该怎么解决

c语言中用一个函数指针作为另一个函数的参数,该怎么解决,第1张

首先需要声明函数指针的类型(下例子中的typedef int (fpFunt)(int a,int b),再定义某个函数(下例中的Add),在其参数列表中使用该函数指针类型,同时需要定义另一函数(下例中的fpAdd,注意该函数形式要和fpFunt一致,本例子中是返回一个整数,两个整型参数)作为实参用。这里在手机上使用易历知食软件内的微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的数组,这个跟编译器有点关系

分类: 电脑/网络 >> 程序设计 >> 其他编程语言

问题描述:

大家帮我看下下面这个程序中的注释,看看那样改为什么不行

void getptr(int p,int num)

{

p=(int )maccol(numsizeof(int));/这里为什么定义一个指向指针的指针,定义一个指针为什么不行,在为主函数指针分配动态内存时不能用p==(int )maccol(numsizeof(int))吗?/

return;

}

void main()

{

int ptr;

int k;

getptr(&ptr,10);/这里的实参为什么不能改成ptr,指针实参传给形参的不是地址吗?,ptr不就是指针的地址吗?/

for(k=0;k<10;k++)

{

scanf("%d",&ptr[k]);

}

}

请帮帮看下,注释里的理解有误吗?谢!

解析:

按你的意思,程序改成如下:(后面说明为什么不行)

void getptr(int p,int num)

{

p=(int )maccol(numsizeof(int));

return;

}

void main()

{

int ptr;

int k;

getptr(ptr,10);

for(k=0;k<10;k++)

{

scanf("%d",&ptr[k]);

}

}

首先要说明的是int ptr,这时候ptr指向一个不明确的地址,在这种情况下getptr(ptr,10);这一句传一个地址给getptr里面的p指针,这时候p指针获得的是ptr指针的一个副本,确切的说是ptr指向的对象的内存地址,所以这种方式在函数里面可以用来传一个指针指向的数据,这个数据是引用,但是指针还是副本,就是p与ptr两个所指的数据是一样的,但是两个在内存的地址是不一样的

而你这个程序要求的是给ptr动态分配内存,所以当分配了一块的内存,并且这个内存的首地址赋给p,这时候p指向的东西改变了,但没有影响到ptr指针ptr指针指向的还是他原来的数据,只是p指针的数据改变了

所以这种情况引入一个指针的指针,让p指针指向ptr这个指针(而不是ptr的副本),这时候动态的分配的数据块传给p,这个p就是ptr,所以给ptr分配内存成功

是一样的,pi=&i只是在定义的时候把

i

的地址给

pi指针(px指向x的地址)。“为什么右边同样是地址,左边不相等呢?”这段不知道什么意思?

它们的区别是

左边是利用返回值来读函数,而右边是利用函数调用,

因为只有只有指针才能修改地址的值,要传个地址给它,调用函数中的max要取

,获取它的值。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/12154787.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存