0

当我在结构中使用函数指针数组时,程序崩溃。

#include <stdio.h>

typedef void (*FUNCPTR)(void);

void Function_1()
{
    printf(" In Function_1 \n");
}
void Function_2()
{
    printf(" In Function_2 \n");
}

typedef struct St_FUNCPTR
{
    FUNCPTR xxx[2];  
}ST_FUNCPTR;

FUNCPTR fnptr1[2] =
{
    Function_1,
    Function_2
};

ST_FUNCPTR fnptr =
{
    fnptr1 

};

/* The intention is to call Function_1(); through array of function 
   pointers in the structure. */  

int main()
{
    // to call Function_1();
    fnptr.xxx[0]();
    return 0;
}

如果结构定义如下,则可以正常工作。

ST_FUNCPTR fnptr =
{
    {Function_1,Function_2},
};

我的问题在哪里?

4

1 回答 1

0

我的赌注在这里:

ST_FUNCPTR fnptr =
{
    fnptr1 

};

您要做的是初始化结构,该元素是带有数组的数组。fnptr1 是一个函数指针数组。
通过您的编辑,这是肯定的。你不能用另一个数组初始化数组,就像你不能说 int a1[10]=int b[10] 一样。
澄清一下:这里的 fnptr1 是指向函数指针的指针常量。顺便说一下,它转到 xxx[0] 被转换为指向函数的指针。
接下来的代码做什么,它获取该指针的地址fnptr.xxx[0],将其视为指向函数的指针并使用 () 调用它。但是那个地址下没有函数,只是指向函数的指针,所以发生了崩溃。

于 2013-09-18T15:18:59.667 回答