Получение значения из структуры по указателю на указатель в C - PullRequest
0 голосов
/ 24 февраля 2019

Я делаю программу на 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;
}

1 Ответ

0 голосов
/ 24 февраля 2019

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

struct a{
    int field1,field2;
}

struct b{
    struct a m[10];
}

struct c{
    struct a *m[10] 
}




   /* and usage */        
    struct c *x;
    struct b *y;

    x -> m[5].field1;
    y -> m[5] -> fileld1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...