如何定义一个变量,该变量是可以在 c 中分配其他函数的函数指针



所以如果我得到以下 2 个函数:

void printhex(int x, char y, char z)
{
    printf("%x%x%x,x,y,z);
}
void printdecimal( int x, char y ,char z)
{
    printf("%i%i%i,x,y,z);
}

我将如何定义一个变量,即函数指针,可以分配 2 个给定函数中的任何一个?

同样在 main 函数中,我将如何确定在执行程序时是否在程序名称后输入了任何命令行参数。如果输入了任何内容,我如何将函数指针分配给函数 printhex,否则会将函数分配给 printdecimal?

您可以声明一个变量,如下所示:

void (*printSomething)(int, char, char);

您可以通过以下方式将其分配给其中一个函数:

printSomething = &printhex;

printSomething = &printdecimal;

&是完全可选的,所以你也可以写printSomething = printhex;例如。

你也没有问,但你可以通过指针调用函数(例如(:

(*printSomething)(1, 2, 3);

* 也是可选的,所以你可以只写:

printSomething(1, 2, 3);

如果您还需要命令行参数方面的帮助,那应该是一个单独的问题。

A1( 函数指针如下所示:

void (*myFuncPtr)(int, char, char);

然后,您可以像这样为其分配一个函数:

myFuncPtr = &printhex;

并像这样称呼它:

(*myFuncPtr )(1, 'a', 'b');

答2(main()argc 变量将告知是否输入了除程序名称本身之外的任何命令行参数。如果argc > 1,则在调用程序时传递argc - 1其他字符串。这是因为argc还将程序名称计为参数之一。所以这样的东西应该适合你:

if (1 < argc)
{
    myFuncPtr = &printhex;
}
else
{
    myFuncPtr = &printdecimal;
}

使用 typedef

void printhex(int x, char y, char z) {
      printf("%x%x%x",x,y,z);
}
void printdecimal( int x, char y ,char z) {
      printf("%i%i%i",x,y,z);
}     
typedef void (*printer)(int x, char y ,char z);
printer hex = &printhex;
printer dec = &printdecimal;

如果我理解正确,应该很简单:

void (* ptr)(int, char, char);
ptr = printhex;
(*ptr)(a, b, c); //this will call the function

这样的变量将被声明为

void (*fptr)(int, char, char);

然后分配了一个值:

fptr = printhex;

并用于调用函数:

fptr(13, 'a', 'b');

或者,您可以为函数类型声明一个新名称:

typedef void (*PrintFuncPtr)(int, char, char);

然后将其用于变量声明:

PrintFuncPtr  fptr;

若要定义函数指针,应使用以下语法:

return-type (*pointer name)(parameters);

在这种情况下,您将使用: void (*fp)(int, char, char);名为 fp 的函数指针适用于已定义的两个函数。

分配函数指针

可以像任何其他指针一样完成,但使用函数名称除外。 例如,fp = printhex;会完全按照它所说的去做:将printhex的地址分配给指针fp。 无需对 printhex 使用 & 运算符,因为标识符已隐式转换为指向函数的指针。

最新更新