C 调用函数有问题吗?

C 调用函数有问题吗?,c,C,如果我有这些功能: void main(void) { char *menu[] = {"data", "coming", "here"}; prints(**************); // here printf("\n"); } void prints(char **menu) { int a; while(*menu) { printf("%s", **menu); menu ++;

如果我有这些功能:

void main(void)
{
    char *menu[] = {"data", "coming", "here"};

    prints(**************); // here

    printf("\n");

}




void prints(char **menu)
{
    int a;
    while(*menu)
    {
        printf("%s", **menu);
        menu ++;
    }

    a = 0;
}

如何调用prints函数???

在C中,您必须在另一个使用函数之前声明您的函数。所以

void prints(char **menu)
{
    int a;
    while(*menu)
    {
        printf("%s", **menu);
        menu ++;
    }

    a = 0;
}

void main(void)
{
    char *menu[] = {"data", "coming", "here"};
    prints(**************); // here 
    printf("\n");
}
或者您可以向前声明函数:

void prints(char **menu);

void main(void)
{
    char *menu[] = {"data", "coming", "here"};
    prints(**************); // here 
    printf("\n");
}

void prints(char **menu)
{
    int a;
    while(*menu)
    {
        printf("%s", **menu);
        menu ++;
    }

    a = 0;
}

在C语言中,必须先声明函数,然后再声明另一个使用它的函数。所以

void prints(char **menu)
{
    int a;
    while(*menu)
    {
        printf("%s", **menu);
        menu ++;
    }

    a = 0;
}

void main(void)
{
    char *menu[] = {"data", "coming", "here"};
    prints(**************); // here 
    printf("\n");
}
或者您可以向前声明函数:

void prints(char **menu);

void main(void)
{
    char *menu[] = {"data", "coming", "here"};
    prints(**************); // here 
    printf("\n");
}

void prints(char **menu)
{
    int a;
    while(*menu)
    {
        printf("%s", **menu);
        menu ++;
    }

    a = 0;
}

您可以将
prints
函数移到
main
上方,也可以将
prints
的原型移到main上方,如下所示:

void prints(char **menu);

然后,您可以像调用任何其他函数一样,从
main
调用
prints

您可以将
prints
函数移到
main
上方,也可以将
prints
的原型放在main上方,如下所示:

void prints(char **menu);

然后,您可以像调用任何其他函数一样,从
main
调用
prints

这是一个解决了几个问题的版本:

#include <stdio.h>

// declare function before using it
void prints(char **menu)
{
    // make sure parameter is valid
    if (menu != NULL)
    {
        while(*menu)
        {
            // spaces so they don't run together
            // pass *menu not **menu to printf
            printf("%s  ", *menu);
            menu ++;
        }
    }
}

// proper return type for main()
int main(void)
{
    // array terminator added
    char *menu[] = {"data", "coming", "here", NULL};

    prints(menu); // here

    printf("\n");

    // return with no error
    return 0;
}
#包括
//在使用函数之前声明它
无效打印(字符**菜单)
{
//确保参数有效
如果(菜单!=NULL)
{
while(*菜单)
{
//空间,这样它们就不会一起运行
//将*菜单而不是**菜单传递到printf
printf(“%s”,*菜单);
菜单++;
}
}
}
//main()的正确返回类型
内部主(空)
{
//添加了数组终止符
char*菜单[]={“数据”,“即将到来”,“此处”,NULL};
打印(菜单);//这里
printf(“\n”);
//无误返回
返回0;
}

这是一个解决了几个问题的版本:

#include <stdio.h>

// declare function before using it
void prints(char **menu)
{
    // make sure parameter is valid
    if (menu != NULL)
    {
        while(*menu)
        {
            // spaces so they don't run together
            // pass *menu not **menu to printf
            printf("%s  ", *menu);
            menu ++;
        }
    }
}

// proper return type for main()
int main(void)
{
    // array terminator added
    char *menu[] = {"data", "coming", "here", NULL};

    prints(menu); // here

    printf("\n");

    // return with no error
    return 0;
}
#包括
//在使用函数之前声明它
无效打印(字符**菜单)
{
//确保参数有效
如果(菜单!=NULL)
{
while(*菜单)
{
//空间,这样它们就不会一起运行
//将*菜单而不是**菜单传递到printf
printf(“%s”,*菜单);
菜单++;
}
}
}
//main()的正确返回类型
内部主(空)
{
//添加了数组终止符
char*菜单[]={“数据”,“即将到来”,“此处”,NULL};
打印(菜单);//这里
printf(“\n”);
//无误返回
返回0;
}

打印(菜单)
,但是您忘了在
菜单
数组的末尾添加一个空元素,因为
打印
需要知道何时中断循环。另外,它应该是
int main()
,而不是
void main(void)
——如果您的C编译器没有抱怨后者,请将它扔掉,并找到一个更好的(例如gcc).我将开始在模糊C竞赛中使用
void main
——它会自动使人们对所有其他问题视而不见。。。我的意思是如何从main调用它,我的意思是如何调用它,使菜单数组获得双指针,所以我必须在这里打印(*****************”);//这里的
打印(菜单)
,但是您忘记在
菜单
数组的末尾添加一个NULL元素,因为
打印
需要知道何时中断循环。另外,它应该是
int main()
,而不是
void main(void)
——如果您的C编译器没有抱怨后者,请将它扔掉,并找到一个更好的(例如gcc).我将开始在模糊C竞赛中使用
void main
——它会自动使人们对所有其他问题视而不见。。。我的意思是如何从main调用它,我的意思是如何调用它,使菜单数组获得双指针,所以我必须在这里打印(*****************”);//你的意思是翻转那些函数吗?哈哈,是的,我忘了添加一部分关于前向声明。在SO.Tnx上进行这样的竞赛,我是说如何从main调用它,我是说如何调用它,使菜单数组获得双指针,所以我必须在这里打印(****************);//那么,考虑到代码甚至不会编译,也许你应该发布一些有效的代码?还有其他的问题,看看评论。你是不是想把那些函数翻过来?哈哈,是的,我忘了添加一个关于转发声明的部分。在SO.Tnx上进行这样的竞赛,我是说如何从main调用它,我是说如何调用它,使菜单数组获得双指针,所以我必须在这里打印(****************);//那么,考虑到代码甚至不会编译,也许你应该发布一些有效的代码?还有其他问题,请看评论。tnx真的tnx的解释:)tnx真的tnx的解释:)