三九宝宝网宝宝教育教学论文

C语言中函数指针用法

12月25日 编辑 39baobao.com

[C语言中的指向数组的指针怎么理解]要点:理解数组名其实就是一把指针!它指向所有元素的第一个int a[10]; 则它的内存分布:a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] 数组名 a 就是指向了第一个元素 a[0]...+阅读

在C语言中,指针被广泛使用,而函数指针是最为高级的用法之一,也是容易疑惑的地方之一。

看下面这段代码:

#include

void F(int a, int* output)

{

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

*output = a + 1;

}

typedef void (*FUNC)();

int main()

{

FUNC f = F;

int ret = 0;

f(3, &ret);

printf("ret = %d\n", ret);

return 0;

}

上面看出 FUNC 的类型是与F的类型不匹配的,这样可以通过编译吗?

答案是: 可以的。由于在C语言中编译函数的时候,是仅仅将其函数名作为该函数的

唯一标识,为其分配相应地址。所以虽然FUNC 与 F的类型不一致,但是对于编译器看来

都是两个地址,是无所谓的。

用上面的特点,可以写出非常通用的函数指针类型,

typedef int (*FUNC)(); 这里之所有要有返回值,是用来标识该函数是否执行成功的错误代码标志。

随说做了有一段时间的C了,但尽然没有搞明白函数指针的用法,见到了也没有好好研究,今天终于有时间了,在网上搜了一下,终于弄懂了.原来就是定义了一个指针变量,只不过形式有点怪罢了.其实还是当成指针用就行了!

一般有两种用法: 1定义函数指针 int (*functionPoint)(int, int)----这只是定义了一个指向函数的指针 int a(int a,int b)----------------这是与之相符的函数原型 void main()-----------------------使用 { functionPoint = a;------------先赋值 functionPoint(1,2);----------调用

} 2用typedef定义使用 typedef int (*functionPoint)(int,int);----------定义了一种类型名为functionPoint的指针 int a(int a, int b)-----------------------------函数原型 void main() { functionPoint fun;---------------------------定义指针 fun = a;-------------------------------------赋值 fun(1,2);---------------------------------使用

} 函数就是这个函数的指针.

以下为关联文档:

C语言指针搜索数组里的数1 2 3 4 5 6 7 8 9 10 11 12 13 intmy_max = -INT_MAX; intrnd = 0; //第一步取得2113数组5261里最大数 for(i = 0; i < sizeof(arr), ++i) { if(arr[i] > my_max) my_max =...

C语言用指针在数组中查找特定值#include<stdio.h> int find(int *p,int n,int b) { int i=0; while(i<n) { if(*p++==b) return i; i++; } return -1; } int main() { int k; int a[]={1,2,3,4,5}; int b;...

c语言中函数名就是一个指针是的。c语言中, 函数名也称为函数的指针,所以c语言中函数名就是一个指针。 “函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字...

C语言如何声明一个返回函数指针的函数C语言指向函数的指针承载的信息比较复杂,组织起来要素要写全。根据指向函数的指针的书写语法,下面的代码就是一个返回函数指针的函数: int (*f(void))(int){//f是函数,没有参数,...

C语言中的函数指针函数指针是定义一个指向函数的指针,形式为:void (*p)(void); 一般用法: int fun1(int x); int fun2(int x); char fun3(int x); int fun4(char x); int main(void) { int (*p)(...

C程序中左移的具体用法是什么C语言中,“<&lt;”为左移运算符,“>&gt;”为右移运算符。 具体使用方法如下: 1、左移运算符(<<) 将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃,右边补0)。 例:a = a <...

在C语言中11种赋值运算符的具体含义用法1.= 赋值运算符 变量=表达式 如:a=3;将a的值赋为3 2./= 除后赋值 变量/=表达式 如:a/=3;即a=a/3 3.*= 乘后赋值 变量*=表达式 如:a*=3;即a=a*3 4.%= 取模后赋值 变量%=表达式 如:a%...

C语言中的char具体用法C语言中char用于定义字符类型变量或字符指针变量,例如“char a;”则定义了变量a是字符类型,“char *a;”则定义了变量a是字符指针类型。 char是C语言整型数据中比较古怪的一个,其...

二维数组指针 C语言编程 #include int main() { int a[2][5] = {{1,2,6,3,0},{10,20,40,60,80}}; int i,flag,order,value; while(scanf("%d",&order) == 1) { flag = 1; for(i = 0; i if(order == a...

推荐阅读
图文推荐