2015-02-27 2 views
1

Я натолкнулся на приведенный ниже код, и я немного смущен относительно его цели.Какова цель этой статической структуры?

struct bob{ 
    int myNum; 
    struct bob * next; 
}; 

static struct bob_stuff{ 
    int theNum; 
    struct bob *lists; 
} bob; 

Я знаю, что вторая структура является статической и быть intialized как боб структура, но почему бы вы сделали это? Но я не уверен, почему у вас есть 2 структуры.

+1

Вторая структура не относится к типу 'struct bob', она имеет тип' struct bob_stuff'. Есть очень важное различие. Хотя члены структур эквивалентны, две структуры не могут быть назначены друг другу. –

+4

Я уверен, что 'static' применяется только к переменной' bob', а не 'struct bob_stuff'. – crashmstr

+0

Статический член может быть доступен только из своего файла, а из другого файла вы не можете получить к ним доступ, здесь вы не можете получить доступ к бобу из других файлов, но у вас есть доступ к struct bob_stuff и struct bob. –

ответ

2

Это выглядит как «модуль» (или «класс», если вы это сделаете), чтобы поддерживать связку односвязных списков целых чисел.

Конечно, именование ужасно, это должно быть, например,

struct list_node { 
    int myNum; 
    struct list_node *next; 
}; 

static struct { 
    int theNum; 
    struct list_node *lists; 
} listState; 

Обратите внимание, что название («структура тега») bob_stuff бессмысленно и запутанным, и, вероятно, следует удалить. Если вы хотите static, таким образом, локальный, переменный типа struct, скорее всего, тег не будет полезен в любом случае.

+0

Спасибо, что очищает его. Будет ли myNum статичным или нет?Я предполагаю, что не потому, что часть структуры list_node, которая не является статичной, хотя и является частью списка, содержащегося в переменной listState. – CoderRightInTheProgram

+0

Ничего о 'struct list_node''' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''. Тот факт, что 'listState', статическая переменная, содержит указатель на значения этого типа, не изменяет само декларацию типа. – unwind

3

Я думаю, что это названия структур, которые вас путают.

Это определение единственного связанного списка.

Первая структура

struct bob{ 
    int myNum; 
    struct bob * next; 
}; 

определяет узел списка. Это было бы более понятно, я буду переписывать его с разными именами

struct Node{ 
    int value; 
    struct Node * next; 
}; 

Вторая структура просто определяет главу списка и количество узлов в списке (как я thik)

static struct bob_stuff{ 
    int theNum; 
    struct bob *lists; 
} bob; 

Таким образом, можно переписать как

static struct SingleLinkedList{ 
    int nodes_count; 
    struct Node *head; 
} list; 

Этот абстрактный список используется в качестве контейнера для некоторых Бобом вещи. :)

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