fbpx
维基百科

函数指针

函数指针是一种在CC++D语言、其他类 C 语言和Fortran 2003中的指针。函数指针可以像一般函数一样,用于调用函数、传递参数。在如 C 这样的语言中,通过提供一个简单的选取、执行函数的方法,函数指针可以简化代码。

函数指针只能指向具有特定特征的函数。因而所有被同一指针运用的函数必须具有相同的参数個數和型態和返回类型。

C/C++编程语言

C语言标准规定,函数指示符(function designator,即函数名字)既不是左值,也不是右值。但C++语言标准规定函数指示符属于左值,因此函数指示符转换为函数指针的右值属于左值转换为右值。

除了作为sizeof或取地址&的操作数,函数指示符在表达式中自动转换为函数指针类型右值。[1]因此通过一个函数指针调用所指的函数,不需要在函数指针前加取值或反參照(*)运算符。

实例

以下为函数指针在C/C++中的运用

/* 例一:函式指標直接呼叫 */ # ifndef __cplusplus  # include <stdio.h> # else  # include <cstdio> # endif int max(int x, int y) {  return x > y ? x : y; } int main(void) {  /* p 是函式指標 */  int (* p)(int, int) = & max; // &可以省略  int a, b, c, d;  printf("please input 3 numbers:");  scanf("%d %d %d", & a, & b, & c);  /* 與直接呼叫函式等價,d = max(max(a, b), c) */  d = p(p(a, b), c);   printf("the maxumum number is: %d\n", d);  return 0; } 


/* 例二:函式指標作為參數 */ struct object {  int data; }; int object_compare(struct object * a,struct object * z) {  return a->data < z->data ? 1 : 0; } struct object *maximum(struct object * begin,struct object * end,int (* compare)(struct object *, struct object *)) {  struct object * result = begin;  while(begin != end)  {  if(compare(result, begin))  {  result = begin;  }  ++ begin;  }  return result; } int main(void) {  struct object data[8] = {{0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}};  struct object * max;  max = maximum(data + 0, data + 8, & object_compare);  return 0; } 

脚注

  1. ^ C++语言标准规定:A function designator is an expression that has function type. Except when it is the operand of the sizeof operator or the unary & operator, a function designator with type ‘‘function returning type’’ is converted to an expression that has type ‘‘pointer to function returning type’’.

相關條目

函数指针, 此條目没有列出任何参考或来源, 2012年5月5日, 維基百科所有的內容都應該可供查證, 请协助補充可靠来源以改善这篇条目, 无法查证的內容可能會因為異議提出而移除, 是一种在c, d语言, 其他类, 语言和fortran, 2003中的指针, 可以像一般函数一样, 用于调用函数, 传递参数, 在如, 这样的语言中, 通过提供一个简单的选取, 执行函数的方法, 可以简化代码, 只能指向具有特定特征的函数, 因而所有被同一指针运用的函数必须具有相同的参数個數和型態和返回类型, 目录, 编程语言, 实例, . 此條目没有列出任何参考或来源 2012年5月5日 維基百科所有的內容都應該可供查證 请协助補充可靠来源以改善这篇条目 无法查证的內容可能會因為異議提出而移除 函数指针是一种在C C D语言 其他类 C 语言和Fortran 2003中的指针 函数指针可以像一般函数一样 用于调用函数 传递参数 在如 C 这样的语言中 通过提供一个简单的选取 执行函数的方法 函数指针可以简化代码 函数指针只能指向具有特定特征的函数 因而所有被同一指针运用的函数必须具有相同的参数個數和型態和返回类型 目录 1 C C 编程语言 1 1 实例 2 脚注 3 相關條目C C 编程语言 编辑C语言标准规定 函数指示符 function designator 即函数名字 既不是左值 也不是右值 但C 语言标准规定函数指示符属于左值 因此函数指示符转换为函数指针的右值属于左值转换为右值 除了作为sizeof或取地址 amp 的操作数 函数指示符在表达式中自动转换为函数指针类型右值 1 因此通过一个函数指针调用所指的函数 不需要在函数指针前加取值或反參照 运算符 实例 编辑 以下为函数指针在C C 中的运用 例一 函式指標直接呼叫 ifndef cplusplus include lt stdio h gt else include lt cstdio gt endif int max int x int y return x gt y x y int main void p 是函式指標 int p int int amp max amp 可以省略 int a b c d printf please input 3 numbers scanf d d d amp a amp b amp c 與直接呼叫函式等價 d max max a b c d p p a b c printf the maxumum number is d n d return 0 例二 函式指標作為參數 struct object int data int object compare struct object a struct object z return a gt data lt z gt data 1 0 struct object maximum struct object begin struct object end int compare struct object struct object struct object result begin while begin end if compare result begin result begin begin return result int main void struct object data 8 0 1 2 3 4 5 6 7 struct object max max maximum data 0 data 8 amp object compare return 0 脚注 编辑 C 语言标准规定 A function designator is an expression that has function type Except when it is the operand of the sizeof operator or the unary amp operator a function designator with type function returning type is converted to an expression that has type pointer to function returning type 相關條目 编辑函数对象 高阶函数 取自 https zh wikipedia org w index php title 函数指针 amp oldid 69266352, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。