资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

c语言怎么返回函数指针,c语言返回指针的函数

C语言怎么让“函数”返回“指针数组”

首先,你不应该返回局部变量的指针,因为局部变量在离开函数后就会被销毁。如果你想这样返回一个数组的话,你应该malloc出一个数组来返回。

创新互联坚持“要么做到,要么别承诺”的工作理念,服务领域包括:网站制作、网站设计、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的黄陵网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!

至于应该return什么,return

(malloc出来的那个指针)就可以了。

例如

int**

foo()

{

int

**p

=

(int

**)malloc(sizeof(int

*)*10);

...

...

...

return

p;

}

这个p指向一个内存段,这个内存段存有十个int*类型的元素。

c语言,返回函数的三种方法,请解释明白点,有例子更好了?

函数参数和

返回值

三种传递方式:值传递、指针传递和引用传递

引用与指针的比较

引用是

C++中的概念,初学者容易把引用和指针混淆一起。一下程序中,n

是m

的一个引用(

reference

),m

是被引用物(referent)。

int

m;

int

n

=

m;

n

相当于m

的别名(绰号),对n

的任何操作就是对m

的操作。所以n

既不是m

的拷贝,也不是指向m

的指针,其实n

就是m

它自己。

C++语言

中,函数的参数和返回值的传递方式有三种:值传递、指针传递和引用传递。

以下是“值传递”的示例程序。由于Func1

函数体内的x

外部变量

n

的一份拷贝,改变x

的值不会影响n,

所以n

的值仍然是0。

void

Func1(int

x)

{

x

=

x

+

10;

}

int

n

=

0;

Func1(n);

cout

“n

=

n

endl;

//

n

=

以下是“指针传递”的示例程序。由于Func2

函数体内的x

是指向外部变量n

的指针,改变该指针的内容将导致n的值改变,所以n

的值成为10。

void

Func2(int

*x)

{

(*

x)

=

(*

x)

+

10;

}

int

n

=

0;

Func2(n);

cout

“n

=

n

endl;

//

n

=

10

以下是“引用传递”的示例程序。由于Func3

函数体内的x

是外部变量n

的引用,x

和n

是同一个东西,改变x

等于改变n,所以n

的值成为10。

void

Func3(int

x)

{

x

=

x

+

10;

}

int

n

=

0;

Func3(n);

cout

“n

=

n

endl;

//

n

=

10

对比上述三个示例程序,会发现“引用传递”的性质象“指针传递”,而书写方式象“值传递”。实际上“引用”可以做的任何事情“指针”也都能够做,为什么还要“引用”这东西?

答案是“用适当的工具做恰如其分的工作”。

c语言中如何用返回函数指针

举个两个整数加法的例子,希望对你有帮助:

#include stdio.h#include conio.h

//声明指向函数的指针类型fpAdd,该类型的函数,有两个整数作为参数,返回值是一个整数。

//其他类型的函数指针声明方式类似,即:typedef 函数返回值类型 (*函数指针类型名称)(函数参数列表);

typedef int (*fpAdd)(int a,int b);

//声明两个和fpAdd类型一致的函数

int AddTest(int a,int b);

int AddTestAdd5(int a,int b);

//声明两个返回函数指针的函数

fpAdd GetAddFun();

fpAdd GetAdd5Fun();

void main()

{

int a = 1;

int b = 2;

int sum;

//取得指向函数(AddTest)的指针

fpAdd add = GetAddFun();

//取得指向函数(AddTestAdd5)的指针

fpAdd add5 = GetAdd5Fun();

//通过函数指针调用函数。

sum = add(a,b);

//输出结果

printf("a+b=%d\n",sum);

sum = add5(a,b);

//输出结果

printf("a+b=%d\n",sum);

getch();}

int AddTest(int a,int b)

{

return a+b;

}

int AddTestAdd5(int a,int b)

{

return a+b+5;

}

fpAdd GetAddFun()

{

return AddTest;

}

fpAdd GetAdd5Fun()

{

return AddTestAdd5;

}

C语言如何声明一个返回函数指针的函数?

C语言指向函数的指针承载的信息比较复杂,组织起来要素要写全。根据指向函数的指针的书写语法,下面的代码就是一个返回函数指针的函数:

int (*f(void))(int){//f是函数,没有参数,返回指向一个函数的指针;这个被指向的函数有一个int型形参,且返回一个int值

return fun;//fun是个函数名,必须具备一个int形参、返回int值的要求

}

以下代码可以验证上述函数的正确性:

//#include "stdafx.h"//If the vc++6.0, with this line.

#include "stdio.h"

int fun(int n){

printf("abcdef\n");

return n;

}

int (*f(void))(int){

return fun;

}

int main(void){

printf("%d\n",f()(100));//调用函数f,通过f返回的指针用100调用函数fun

return 0;

}

输出是:

abcdef

100

C语言 函数返回指针

首先,说一下第一个问题,第一个不交换是因为定义的k是一个指针,指针说白了就是一个指向,我指向你,他指向她,然后换成我指向她,他指向你,你把他们指向的位置交换,而并没有交换他们地址里面存储的值,这样是并没有任何区别,在最后函数结束之后,函数的那些指针指向全部释放,和修改不修改没什么两样;定义的是一个整型变量,他把s

指针指向的地址里面的值与

t

指针指向的地址的值进行了交换,这样就修改了内存里面的值,即便是函数结束了也不会释放,自然就能做到交换了。

第二个问题,存储地址是会释放,但是释放的是函数内部定义的局部变量,现在你已经把s的地址通过return

返回回来并且存在

主函数的

r

中了,所以自然就不会释放了

C语言 带指针的函数 如何让它return指针?

指针可以返回,但是要注意函数内部的数组用指针返回后,到了函数外面,这个数组已经被释放了。所以是个野指针,用了就死机!这种情况可以动态申请一段内存,比如malloc函数,用完后再用free函数释放内存。

#includestdio.h

#includestdlib.h

float * Input(int len)

{

int length;

int i;

float *a;

printf("Enter a number to sort numbers:\n");

scanf("%d",length);

len = length;

a=(float *)malloc(length*sizeof(float));

printf("Enter the number %d (Digital separated by whitespace or the end of line):\n",length);

for(i=0;ilength;i++)

{

scanf("%f",a[i]);

}

return a;

}

void Sort(float * a, int len)

{

int i,j,length;

length = len;

for(i=0;ilength-1;i++)

for(j=0;jlength-1-i;j++)

if(a[j]a[j+1])

{

a[j]=a[j]+a[j+1];

a[j+1]=a[j]-a[j+1];

a[j]=a[j]-a[j+1];

}

}

void main()

{

float *date = NULL;

int len;

int i;

date = Input(len);

Sort(date, len);

printf("This %d number from small to large order is the order of:\n",len);

for(i=0;ilen;i++)

printf("%-7.2f\n",date[i]);

free(date);

}

我改了一下你的程序,不太好看,只是给你看看怎么返回指针。


分享标题:c语言怎么返回函数指针,c语言返回指针的函数
新闻来源:http://cdkjz.cn/article/hoogps.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220