指针函数怎么调用,指针函数怎么调用c语言

http://www.itjxue.com  2023-01-06 14:49  来源:未知  点击次数: 

如何调用指针函数

1.如果是返回值是指针

char* getname()

{

char* pname=new char[23]; //返回指针必须是函数释放后并未释放的内存空间,

cout"input your name:\n"; //一般返回两种情况,一是在函数中像该函数一样动态分配堆内存

cin.getline(pname,22); //二是返回指针指向参数中地址,如: int* max(int a,int b) { return a; }

pname[22]='\0';

return pname;

}

int main()

{

char* name=getname();

cout"your name is: "nameendl;

delete []name; //记得动态释放分配内存

return 0;

}

2.参数是指针类型

常见的是通过指针或引用交换两个数的值

void swa(int* p1,int* p2)

{

int temp=*p1; *p1=*p2; *p2=temp;

}

int main()

{

int a=2,b=3;

swa(a,b); //传递地址

return 0;

}

附解:你可以把指针看做是一种复合类型,它之所以可以修改参数值,本质是因为

对指针解除引用*p形式是操作的参数所存数据内存空间,但如果它不解除引用,它

并不会修改参数的值:如

void swa(int* p1,int* p2) //函数意思是最初始在函数参数块中定义两个指针p1,p2,使

{ //p1指向a,p2指向b,下面函数体只是使指针指向地址改变,成了

//p1指向b,p2指向a。但并未对a,b内存空间操作,当函数调用结束后,指针p1,p2

//也释放了,所以并未起任何作用

int* temp;

temp=p1; p1=p2; p2=temp;

}

int main()

{

int a=2,b=3;

swa(a,b); //传递地址

couta" "b;

return 0;

}

这个函数并不会交换a,b的值

如何通过函数指针调用函数

一般需要定义一个函数指针类型

typedef int (*function_pointer_t) ( int arg1, int arg2 );

然后,定义函数指针变量

function_pointer_t fp_invoker = 0;

函数指针可以动态改变内容,改变调用对象,假设有两个函数

int function_sum( int arg1, int arg2 )

{

return arg1+arg2;

}

int function_sub( int arg1, int arg2 )

{

return arg1-arg2;

}

注意到两个函数的原型与函数指针类型是一致的。以下是调用

fp_invoker = function_sum; // 直接用函数名赋值即可

fp_invoker(1,2); // 调用时,可以认为函数指针便是函数名,此时调用加法

fp_invoker = function_sub; // 同理,切换到减法

fp_invoker(1,2); // 调用减法

以上都是直观的用法,通常函数指针用于回调,即下层函数先将函数指针内容保存起来,处理结束后,再调用。此时要注意首先检查函数指针内容是否为空。

if( fp_invoker ){

fp_invoker( arg1, arg2 );

}

带指针的函数怎么调用?

什么叫带指针的函数?说清楚点嘛?

1.如果是返回值是指针

char* getname()

{

char* pname=new char[23]; //返回指针必须是函数释放后并未释放的内存空间,

cout"input your name:\n"; //一般返回两种情况,一是在函数中像该函数一样动态分配堆内存

cin.getline(pname,22); //二是返回指针指向参数中地址,如: int* max(int a,int b) { return a; }

pname[22]='\0';

return pname;

}

int main()

{

char* name=getname();

cout"your name is: "nameendl;

delete []name; //记得动态释放分配内存

return 0;

}

2.参数是指针类型

常见的是通过指针或引用交换两个数的值

void swa(int* p1,int* p2)

{

int temp=*p1; *p1=*p2; *p2=temp;

}

int main()

{

int a=2,b=3;

swa(a,b); //传递地址

return 0;

}

附解:你可以把指针看做是一种复合类型,它之所以可以修改参数值,本质是因为

对指针解除引用*p形式是操作的参数所存数据内存空间,但如果它不解除引用,它

并不会修改参数的值:如

void swa(int* p1,int* p2) //函数意思是最初始在函数参数块中定义两个指针p1,p2,使

{ //p1指向a,p2指向b,下面函数体只是使指针指向地址改变,成了

//p1指向b,p2指向a。但并未对a,b内存空间操作,当函数调用结束后,指针p1,p2

//也释放了,所以并未起任何作用

int* temp;

temp=p1; p1=p2; p2=temp;

}

int main()

{

int a=2,b=3;

swa(a,b); //传递地址

couta" "b;

return 0;

}

这个函数并不会交换a,b的值

(责任编辑:IT教学网)

更多

推荐FTP服务器文章