Массив пустых указателей в C - PullRequest
2 голосов
/ 31 августа 2011

Я хотел бы создать массивы указателей void.

# include <stdio.h>
# include <stdlib.h>
# include <unistd.h>

int main(){

void * A[3];
void * D[3];
void * F[2];
void * G[4];
void * H[4];
void * J[3];
void * K[5];
void * L[4];
void * M[5];


A={D, H, K};
D ={A, G, H};
F ={K, L};
G={D, H, J, M};
H={A, G, L, M};
J={G, L, M};
K={A, F, H, L, M};
L={F, J, K, M};
M={G, H, J, K, L};
return 0;
}

Проблема в том, что код не будет компилироваться, он говорит: "ожидаемое выражение перед {токеном"

Что не так? Я использую эти указатели, потому что их значение не имеет значения, я просто хочу, чтобы они указывали друг на друга. Например, М должен указывать на G, H, J, K и L.

Большое спасибо за любую помощь или совет,

Ответы [ 4 ]

6 голосов
/ 31 августа 2011

Вы должны сделать это в той же строке, если хотите использовать это обозначение. В вашем случае вам придется сделать

A[0] = D;
A[1] = H;
A[2] = K;

и т. Д., Поскольку вам необходимо добавить void * к символам, которые еще не были разрешены в этот момент.

4 голосов
/ 31 августа 2011

Так работает С.

Я полагаю, вам нужен код, который выглядит следующим образом:

A[0] = D;
A[1] = H;
A[2] = K; 

или код, который выглядит следующим образом:

void * A[3]={D,H,K};
2 голосов
/ 31 августа 2011

Вы не можете использовать инициализаторы массива в качестве присваиваний. Вам нужно будет выполнять задания по элементам:

A[0] = D;
A[1] = H;
A[2] = K;
2 голосов
/ 31 августа 2011

Массивы не допускаются в левой части назначения, кроме случаев, когда они объявлены, и инициализаторы массива могут использоваться только во время объявлений.

Таким образом, вам придется написать, например:

A[0] = D;
A[1] = H;
A[2] = K;
...