2015-03-04 1 views
0

У меня есть два указателя void внутри структур.Назначить значение по значению указателя из указателя void

typedef struct DATA_T { 
    BOOLEAN trigger; 
    void *var_p; 
    void *data_p; 
} DATA_T; 

typedef struct ITEM_T { 
    DATA_T job_data[100]; 
    BOOLEAN job_active; 
    BOOLEAN job_send; 
} ITEM_T; 

ITEM_T foo[100]; 

Я назначил два указателя пустоты на разные адреса. Теперь у меня есть значение на одном указателе и вы хотите установить другой указатель = на это значение.

foo[i].job_data[j]->data_p = *(int*)foo[i].job_data[j].var_p; 

Эта ошибка затем размещена:

error C2232: '->data_p' : left operand has 'struct' type, use '.' 

Я не верю, что я хочу . вместо -> здесь, потому что мне нужно разыменования указателя data_p.

Благодарим за помощь.

+1

Вы говорите, что хотите «разыменовать data_p», однако невозможно разыменовать 'void *'. (Если бы это было возможно, вы бы сделали это, написав '* (foo [i] .job.data [j] .data_p)', где круглые скобки являются избыточными, но я добавил их для ясности) –

ответ

2

Сообщение об ошибке связано с тем, что job_data[j] не является указателем. Это DATA_T. Таким образом, левая сторона должна быть foo[i].job_data[j].data_p =.

Однако есть еще одна ошибка. С правой стороны *(int *) создает int, который не может быть сохранен в void *.

Если вы хотите, чтобы оба указателя указывали на одно и то же место, удалите *(int *).

Если оба указателя на самом деле указывают на int s, и вы хотите скопировать указанное значение с обеих сторон, затем поместите *(int *) с обеих сторон.

+0

Хорошо, одна проблема решена. Еще один. Редактирование сообщения. Я не хочу, чтобы они указывали на одно и то же место. Я хочу значение от одного, установленного к другому. – user432209

+0

@ user432209 обновлен –

+0

Да, это было, спасибо. – user432209

0

Элементы массива job_data не являются указателями, они относятся к типу DATA_T.

Смежные вопросы