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

时间:2016-04-14 05:08:19

标签: c

所以,如果给我以下两个功能:

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);
}

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

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

6 个答案:

答案 0 :(得分:2)

您可以声明一个类似于:

的变量
void (*printSomething)(int, char, char);

您可以将其分配给其中一个功能:

printSomething = &printhex;

printSomething = &printdecimal;

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

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

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

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

printSomething(1, 2, 3);

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

答案 1 :(得分:1)

A1)这是函数指针的样子:

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

然后为此分配一个函数:

myFuncPtr = &printhex;

并称之为:

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

A2)argc的{​​{1}}变量将告诉是否输入了除程序名本身之外的任何命令行参数。如果main(),则调用程序时会传递argc > 1个其他字符串。这是因为argc - 1还将程序名称计为参数之一。所以这样的事情对你有用:

argc

答案 2 :(得分:1)

使用typedef

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

答案 3 :(得分:1)

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

void (* ptr)(int, char, char);
ptr = printhex;

(*ptr)(a, b, c); //this will call the function

答案 4 :(得分:0)

此变量将声明为

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

然后分配了一个值:

fptr = printhex;

用于调用函数:

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

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

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

然后将其用于变量声明:

PrintFuncPtr  fptr;

答案 5 :(得分:0)

要定义函数指针,您将使用以下语法:

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

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

除了使用函数名称外,可以像任何其他指针一样分配函数指针。例如,fp = printhex;将完全按照其说法执行操作:将printhex的地址指定给指针fp。您不需要为&使用printhex运算符,因为标识符会隐式转换为指向函数的指针。