структура в c с атрибутом, который является указателем на ту же структуру - PullRequest
0 голосов
/ 21 октября 2018

Мне нужно создать структуру с атрибутом, который является указателем на ту же структуру.

Я пробую это решение, но не работаю:

    typedef struct
{
    int number;
    void *other;
}mystruct;

extern mystruct first[];
extern mystruct second[];

mystruct first[] = {{1,NULL},{2,second}};
mystruct second[] = {{3,NULL},{4,first}};

mystruct *wrap;
wrap = (mystruct *)first[1].other;

int main(void){
    printf("%d\n",first[0].number);
    printf("%d\n",second[0].number);
    printf("%d\n",wrap[1].number);
}

Может кто-нибудь помочь мне?С наилучшими пожеланиями и спасибо

Ответы [ 3 ]

0 голосов
/ 21 октября 2018

В C вы можете назвать структуру перед ее использованием и typdef ing:

typedef struct mystruct_
{
    int number;
    struct mystruct_ *other;
} mystruct
0 голосов
/ 21 октября 2018

ваш первый и второй не должны быть внешними, поскольку они размещены в вашей программе.Вы можете объявить и инициализировать.вар до основного.а в остальном вы должны перейти в основную функцию:

int main(void){

wrap = (first[1].other);

printf("%d\n",first[0].number);  
printf("%d\n",first[1].number); 
printf("%d\n",second[0].number);
printf("%d\n",wrap[1].number);
return 0;}
0 голосов
/ 21 октября 2018

Я не совсем уверен, но вы ищете какие-то связанные списки или точно говорите Самостоятельная структура

struct list {
   int something;
   struct list *use_this_to_point_to_similar_type;
};

Вот еще одинхорошая справка what-is-self-referecing-structure-in-c


просто небольшое упрощение и перемещение нескольких инструкций здесь и там, ниже код написан свободнопример возможно, чего вы ожидаете достичь

#include<stdio.h>
struct mystruct
{
    int number;
    struct mystruct *other;
};


struct mystruct first[] = {{1,NULL},{2,NULL}};
struct mystruct second[] = {{3,NULL},{4,NULL}};
struct mystruct *wrap;

int main(void)
{
        first[1].other = second;
        second[1].other = first;
        wrap = first[1].other;

        printf("%d\n",first[0].number);
        printf("%d\n",second[0].number);
        printf("%d\n",wrap[1].number);

        return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...