这两个函数指针声明有什么区别?

时间:2014-03-13 09:51:35

标签: c pointers

int *(*const fun[])(int argc, char **argv)

const int *(* fun[])(int argc, char **argv).

第一个是const函数指针数组返回整数指针吗?

1 个答案:

答案 0 :(得分:2)

第一个是只读指针数组(即你不能改变fun[i])到接收intchar **的函数,并返回一个指向int的指针。

第二个非常相似,除了你可以改变fun[i],但它指向的函数返回一个指向只读整数的指针。

简而言之:

/* First declaration 
int *(*const fun[])(int argc, char **argv)
*/
int arg1;
char **arg2;
int *example = (*fun[i])(arg1, arg2);
*example = 14; /* OK */
example = &arg1; /* OK */
fun[i] = anoter_function; /* INVALID - fun[] is an array of read-only pointers */

/* Second declaration 
const int *(* fun[])(int argc, char **argv)
*/
const int *example2 = (*fun[i])(arg1, arg2);
fun[i] = another_function; /* OK */
*example2 = 14; /* INVALID - fun[i] returns pointer to read-only value. */
example2 = &arg1; /* OK */