在C中:在指向函数时使用void和int关键字

kus*_*sur 1 c

我正在尝试执行一个程序,其中函数由指针指向.它如下: -

这是第一个使用"void"返回类型的程序.

#include<stdio.h>
#include<conio.h>
void CharPrint(char *ptr);
main()
{
    char *str="Hello World";
    void (*ptr1)(char *ptr);
    ptr1=CharPrint;
    if((*ptr1)(str))
        printf("Done");
    return 0;
}
void CharPrint(char *ptr)
{
    printf("%s\n",ptr);
}
Run Code Online (Sandbox Code Playgroud)

它会引发许多错误.他们是:-

在此输入图像描述

第二个方案如下: -

#include<stdio.h>
#include<conio.h>
int CharPrint(char *ptr);
main()
{
    char *str="Hello World";
    int (*ptr1)(char *ptr);
    ptr1=CharPrint;
    if((*ptr1)(str))
        printf("Done");
    return 0;
}
int CharPrint(char *ptr)
{
    printf("%s\n",ptr);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

该程序运行没有任何打嗝.

输出是: -

在此输入图像描述

我的问题是,在第一个输出中,为什么它在第9行显示"函数main中不允许的类型".其他行也引起了疑虑,但这条线最让我烦恼.有帮助吗?

Max*_*rch 7

你的第一个函数不会返回任何内容.因此,你无法测试 if((*ptr1)(str)).


Dav*_*rtz 5

void (*ptr1)(char *ptr);
ptr1=CharPrint;
if((*ptr1)(str))
    printf("Done");
Run Code Online (Sandbox Code Playgroud)

if如果返回值是什么,测试是void什么?只需将最后两行更改为:

((*ptr1)(str));
Run Code Online (Sandbox Code Playgroud)