void * typed函数参数

时间:2015-01-09 01:12:08

标签: c pthreads

我有一个函数void *Client(void *threaData){}

你能告诉我一些关于void *threadData参数的事情。当您使用void *参数时,为什么?

2 个答案:

答案 0 :(得分:11)

void *是一个通用指针,可以指向任何对象类型。上面的函数可以获取指向任何类型的指针,并且可以返回指向任何类型的指针。

如果不确定用户输入的数据的数据类型,则可以使用通用指针。

示例:以下函数将打印任何数据类型,前提是用户输入有关数据类型的信息

void funct(void *a, int z)
{
    if(z==1)
        printf("%d",*(int*)a); // If user inputs 1, then he means the data is an integer and type  casting is done accordingly.
    else if(z==2)
        printf("%c",*(char*)a); // Typecasting for character pointer.
    else if(z==3)
        printf("%f",*(float*)a); // Typecasting for float pointer
}

答案 1 :(得分:5)

假设您要将整数传递给void *Client(void *threadData){}函数,那么您将

int integer;

integer = SOME_VALUE;

Client(&integer);

并在函数中

void *Client(void *threadData)
{
    int value;

    value = *(int *)threadData;
}

由于void *可以转换为任何指针类型,因此您可以将所需的任何数据传递给Client()函数。