我有一个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();
}
有没有人能为我解释两种情况之间的不同。 谢谢!
答案 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;
}
答案 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;
}