【问题标题】:C trouble with function calling with pointers使用指针调用函数的 C 问题
【发布时间】:2015-11-21 01:19:15
【问题描述】:

我正在使用结构数组来保存有关特定人员的数据,并有 2 个写出数据的函数。第三个函数(Wypisz)使用指针来使用指定的一个。问题是当我尝试编译它时,这个函数在两个“if 子句”中都会出现错误:

错误:'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 是包含库的预定义变量

【问题讨论】:

  • 编译器说错误在哪一行?
  • 两行都带有 'wskfun=' 表达式
  • wskfun=WypiszJedenPoDrugim; 我相信这会将 wskfun 分配给函数指针。只有在调用函数并声明它时才包含参数大括号。函数指针仅表示为方法名称。
  • 看来效果不错,谢谢! :)

标签: c arrays pointers structure


【解决方案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;
    }
}

【讨论】:

    猜你喜欢
    • 2017-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-31
    • 2021-12-05
    • 2014-02-22
    • 2012-04-16
    • 1970-01-01
    相关资源
    最近更新 更多