其中分配函数指针的位置指向函数

时间:2015-07-19 00:16:35

标签: c function-pointers

我有一个funtion_ptr函数指针,指向add_int函数。

案例1:在function_ptr = &add_int函数之外放置一个main语句 - > compiler error: error C2373: 'function_ptr' : redefinition; different type modifiers(这是)

#include <stdio.h>

int add_int(int n, int m){
    return n + m;
}
int(*function_ptr)(int, int);
function_ptr = &add_int;  // it's here

void main(){
    int sum = (* function_ptr)(2, 3);
    printf("sum = %d", sum);
    _getch();
}

案例2:function_ptr = &add_int;函数中的main - &gt;这是真的

#include <stdio.h>

int add_int(int n, int m){
    return n + m;
}
int(*function_ptr)(int, int);


void main(){
    function_ptr = &add_int;  // it's now here
    int sum = (* function_ptr)(2, 3);
    printf("sum = %d", sum);
    _getch();
}

有没有人能为我解释两种情况之间的不同。 谢谢!

2 个答案:

答案 0 :(得分:2)

function_ptr = &add_int;是一个赋值语句。函数内部允许使用语句,但只允许外部函数声明。由于赋值不是声明,因此编译器会发出错误。

如果要将指针指定为其声明/定义的一部分,可以将声明和赋值组合在一起,如下所示:

#include <stdio.h>

int add_int(int n, int m){
    return n + m;
}
int(*function_ptr)(int, int) = &add_int;

int main(){
    int sum = (* function_ptr)(2, 3);
    printf("sum = %d", sum);
    return 0;
}

Demo.

答案 1 :(得分:0)

你不需要&amp;在赋值语句中,函数的名称(add_int)是它的地址......赋值语句应该在函数的范围内。

这是一个有效的例子:

#include <stdio.h>

int add_int(int n, int m);

int(*function_ptr)(int, int);


void main(){

    function_ptr = add_int;
    int sum = (* function_ptr)(2, 3);
    printf("sum = %d", sum);
    getc(stdin);
}

int add_int(int n, int m){
    return n + m;
}