Параметр, передающий несколько значений, используя указатель void - PullRequest
0 голосов
/ 15 октября 2018

Я хочу передать несколько аргументов в функцию, используя пустой указатель.

void* function(void *params)
{
//casting pointers
//doing something
}
int main()
{
  int a = 0
  int b = 10;
  char x = 'S';
  void function(???);
  return 0;
}

Я знаю, что мне нужно привести их к определенной переменной в моей функции, но я не знаю, как я могу передатьмои 3 аргумента как один пустой указатель на мою функцию.

Я искал эту проблему довольно давно, но не смог найти ничего, что могло бы мне помочь.

Ответы [ 2 ]

0 голосов
/ 15 октября 2018

Вы могли бы сделать это так:

struct my_struct
{
   int a;
   int b;
   char x;
}

void * function(void * pv)
{
  struct my_strcut * ps = pv; /* Implicitly converting the void-pointer 
                              /* passed in to a pointer to a struct. */

  /* Use ps->a, ps->b and ps->x here. */

  return ...; /* NULL or any pointer value valid outside this function */
}

Использовать это так

int main(void)
{
  struct my_struct s = {42, -1, 'A'};

  void * pv = function(&s);
}

Отслеживание обновления ОП :

struct my_struct_foo
{
   void * pv1;
   void * pv2;
}

struct my_struct_bar
{
   int a;
   int b;
}

void * function(void * pv)
{
  struct my_strcut_foo * ps_foo = pv; 
  struct my_struct_bar * ps_bar = ps_foo->pv1;

  /* Use ps_foo->..., ps_bar->... here. */

  return ...; /* NULL or any pointer value valid outside this function */
}

Используйте это так

int main(void)
{
  struct my_struct_bar s_bar = {42, -1};
  struct my_struct_foo s_foo = {&s_bar, NULL};

  void * pv = function(&s_foo);
}
0 голосов
/ 15 октября 2018

void * используется как указатель на «универсальный» тип.Следовательно, вам нужно создать тип переноса, cast преобразовать в void *, чтобы вызвать функцию, и cast преобразовать обратно в ваш тип в теле функции.

#include <stdio.h>

struct args { int a, b; char X; };
void function(void *params)
{
  struct args *arg = params;
  printf("%d\n", arg->b);
}
int main()
{
  struct args prm;
  prm.a = 0;
  prm.b = 10;
  prm.X = 'S';
  function(&prm);
  return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...