Как я могу использовать массив для произвольного типа элементов? - PullRequest
0 голосов
/ 12 января 2020

Я знаю, что это не сработает, потому что я не могу сделать арифметику c для void:

int main (void) {

   void *ar = malloc(25); //adress of int + adr of char + adr of int = 3 * 8 + 1 null
   int a =4;
   int b =6;
   *(ar+0)=&a //adr of first int - 8 bytes
   *(ar+8)="abc\0"; // adr of the first char - 8 bytes
   *(ar+16)=&b; // adr of the second int - 8 bytes
   ar[24] = NULL;

   return 0;
}

Так что вопрос в том, как создать буфер произвольного типа, только в соответствии с его шириной байта (в частности, буфер в этом случае будет содержать 3 адреса произвольных типов, но это не должно иметь значения, поскольку все адреса имеют длину 8 байт)?

Как включить компилятор для выполнения арифметических операций c on (void*) по мнению программистов намерены? (потому что я указываю, какой длины буфера я хочу двигаться вперед, чтобы достичь первого байта, с которого начинается).

1 Ответ

0 голосов
/ 12 января 2020

Укажите тип в качестве указателя на указатель на void (или в виде массива указателей). Компилятор знает размер указателя на void, что позволяет выполнять арифметику c как обычно.

В стеке:

void *arr[3];

Динамически:

void **arr = malloc(sizeof(void*)*3);

Использование:

int a = 10, b = 20, c = 30;
arr[0] = &a;
arr[1] = &b;
arr[2] = &c;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...