使用指针调用函数时出现问题

时间:2015-11-21 01:19:15

标签: c arrays pointers structure

我使用结构数组来保存关于特定人的数据,并且具有2个写出数据的功能。第三个函数(Wypisz)使用指针来使用指定的一个。问题是,当我尝试编译它时,在这个函数中出现错误的条件':

错误:在' struct'

之前的预期表达式
struct Osoba
{    char imie[MAX], nazwisko[MAX];
    int rokurodzenia[N];
};

void WypiszWLinii(struct Osoba osoba[])
{    int i;
    for(i=0;i<N;i++)
{
    printf("%c %c, %d\n", osoba[i].imie, osoba[i].nazwisko, osoba[i].rokurodzenia);
}
}
void WypiszJedenPoDrugim(struct Osoba osoba[])
{
int i;
for(i=0;i<N;i++)
{
    printf("%c\n%c\n%d\n", osoba[i].imie, osoba[i].nazwisko,    osoba[i].rokurodzenia);
}
}
void Wypisz(void (*wskfun)(struct Osoba), int i)
{
    if(i=1)
{
    wskfun=WypiszJedenPoDrugim(struct Osoba osoba[]);
}
else if(i=0)
{
    wskfun=WypiszWLinii(struct Osoboa osoba[]);
}
else
{
    printf("Wybrano zla opcje w menu\n");
    return -1;
}
}

N和MAX是带有库包含的预定义变量

1 个答案:

答案 0 :(得分:1)

你在Wypisz函数实现中遇到的问题是指向函数的指针到错误的值。 而不是:

wskfun=WypiszJedenPoDrugim(struct Osoba osoba[]);

wskfun=WypiszWLinii(struct Osoba osoba[]);

你必须获得指向该函数的指针并将其分配给变量:

wskfun = &WypiszJedenPoDrugim;

wskfun = &WypiszWLinii;

之后你可以使用指向函数的指针,如:

wskfun("pointer to struct array");

说,要解决你的问题,必须改变函数:

void Wypisz(void(*wskfun)(struct Osoba[]), int i)
{
    if (i = 1)
    {
        wskfun = &WypiszJedenPoDrugim;
    }
    else if (i = 0)
    {
        wskfun = &WypiszWLinii;
    }
    else
    {
        printf("Wybrano zla opcje w menu\n");
        return -1;
    }
}