Я делаю программу на C. В основном у меня есть структура, которая содержит несколько полей и массив указателей.Каждая структура имеет массив указателей, который указывает на другую структуру, образующую «связь» между ними.Я пытаюсь получить значение поля, которое хранится по адресу памяти указатель, который указывает на него.
Предположим это.У меня есть два из этих узлов в памяти.A и B. A имеет указатель внутри массива A, который является ссылкой на B. Чтобы получить этот указатель, я должен был бы сделать что-то вроде этого:
*temp_ptr = (*ptr).pointer_array[0]
Это получит адрес указателя *ptr
и отдай его *temp_ptr
.
Теперь мне интересно вот это.Как я могу это сделать?Когда я пытаюсь это сделать, я получаю «Выражение должно иметь структуру или тип объединения»
Когда я пытаюсь сделать это, скажем, Java, я мог бы сделать это
int variable = field[0].fieldIWantToGet
Я получил бы желаемый результат.
Вот изображение, чтобы прояснить предполагаемое поведение, которое я пытаюсь получить. Ссылка на поведение
Где структура A находится в «глобальной» совокупности структур и имеет массив указателей, которые ведут к другим структурам, таким как B
Здеськакой-то код из моего проекта.
#define GLOBAL_PTR_ARRAY_SIZE 10
Node* global_node_array[10];
typedef struct Node{
unsigned char node_id;
int *ptr_array[10];
int ptr_array_size;
}Node;
void append_connection(short position, short destination) {
Node* position_ptr = global_node_array[position];
Node* destination_ptr = global_node_array[destination];
if ((*position_ptr).ptr_array_size < GLOBAL_PTR_ARRAY_SIZE) {
int current_ptr_array_size = (*position_ptr).ptr_array_size;
(*position_ptr).ptr_array[current_ptr_array_size] = destination_ptr;
(*position_ptr).ptr_array_size++;
}
void print_id(Node* ptr) {
node* dptr = NULL;
dptr = ptr->ptr_array[0];
pptr = (int) (*ptr).ptr_array[0];
fprintf(stdout, "%d connection to %d exists", (*ptr).node_id, dptr-
>node_id);
}
int main(int argc, char const *argv[])
{
append_connection(0,1);
print_id(global_node_array[0]);
return 0;
}