将函数指针指向函数的位置
where location to assign function pointer point to a function
我有一个指向 add_int
函数的 funtion_ptr
函数指针。
情况 1:当在 main
函数外放置一个语句 function_ptr = &add_int
--> 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:main
函数中的 function_ptr = &add_int;
--> 为真
#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();
}
任何人都可以为我解释这两种情况之间的区别。
谢谢!
function_ptr = &add_int;
是一个赋值语句。函数内部允许语句,但函数外部只允许声明。由于赋值不是声明,编译器会报错。
如果您想将指针作为其 declaration/definition 的一部分进行赋值,您可以将声明和赋值结合起来,如下所示:
#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;
}
您不需要在赋值语句中使用 &,函数的名称 (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;
}
我有一个指向 add_int
函数的 funtion_ptr
函数指针。
情况 1:当在 main
函数外放置一个语句 function_ptr = &add_int
--> 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:main
函数中的 function_ptr = &add_int;
--> 为真
#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();
}
任何人都可以为我解释这两种情况之间的区别。 谢谢!
function_ptr = &add_int;
是一个赋值语句。函数内部允许语句,但函数外部只允许声明。由于赋值不是声明,编译器会报错。
如果您想将指针作为其 declaration/definition 的一部分进行赋值,您可以将声明和赋值结合起来,如下所示:
#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;
}
您不需要在赋值语句中使用 &,函数的名称 (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;
}