函数指针二维数组声明后无法调用函数问题咨询
问题原因与解决方法
你的代码里只是引用了函数指针,但没有触发函数调用操作。C语言中,要调用函数指针指向的函数,必须使用()运算符。
问题细节
你写的ptr[0][0];这类语句,仅仅是对函数指针表达式进行求值,并不会执行对应的函数。要执行函数,必须在指针后加上(),哪怕函数没有参数也要保留空括号。
修正后的代码
#include <stdio.h> void test1(){ printf("test1\n"); } void test2(){ printf("test2\n"); } void test3(){ printf("test3\n"); } void test4(){ printf("test4\n"); } void (*hv_ptr[2])() = {test1,test2}; void (*dev_ptr[2])() = {test3,test4}; void (**ptr[2])() = {hv_ptr, dev_ptr}; int main() { ptr[0][0](); // 调用test1 ptr[0][1](); // 调用test2 ptr[1][0](); // 调用test3 ptr[1][1](); // 调用test4 return 0; }
补充说明
ptr[0][0]获取到的是指向test1的函数指针,加上()后,编译器才会执行该指针指向的函数体。- 对于无参数的函数,调用时的
()不能省略,这是C语言函数调用的语法要求。
内容的提问来源于stack exchange,提问作者user12716429
相关产品推荐
相关产品推荐

