以下是对这几种形式的详细解释和举例:
int * function(int a )
:这表示定义了一个函数function
,它接受一个整型参数a
,并返回一个整型指针。
例如:
int *getPointer(int a) {int *ptr = &a;return ptr;
}
-
(int*)function(int a )
:这是对函数function
的结果进行强制类型转换,将其转换为整型指针。 -
int (*function(int a ))
:这表示定义了一个指向函数的指针function
,该函数接受一个整型参数a
,并返回一个整型。
例如:
int add(int a, int b) {return a + b;
}int (*ptr)(int, int) = &add;
在这个例子中,ptr
指向了函数add
。
指向函数的指针可以通过以下方式使用:
- 像函数一样调用:通过指针间接调用所指向的函数。
- 传递给其他函数:可以将指向函数的指针作为参数传递给其他函数。
例如:
int max(int a,int b)
{return a > b ? a : b;
}int main(void)
{int res;int(*ptr)(int a,int b)=&max;//int(*ptr)(int a,int b)=max;//均正确ptr = max;//ptr = &max;res = ptr(8, 24);printf("%d,%p,%p", res,max,&max);
}
在这种情况下,ptr = max
和ptr = &max
的效果是相同的,这是因为max
本身就是函数的地址。当我们直接使用函数名max
时,它就代表了函数的地址,所以ptr = max
就可以让指针ptr
指向函数max
。而&max
是取函数max
的地址,这也是函数的地址。因此,这两种写法都能正确地将指针指向函数,最终得到的结果是一样的。