Объяснить фрагмент кода с struct
<iostream>
using namespace std;
struct list_ele {
int data;
struct list_ele* pointer;
} ar[3];
int main() {
struct list_ele* lp;
ar[0].data = 5;
ar[0].pointer = &ar[1];
ar[1].data = 99;
ar[1].pointer = &ar[2];
ar[2].data = -7;
ar[2].pointer = NULL;
lp = ar;
while (lp) {
cout << "contents " << lp->data << endl;
lp = lp->pointer;
}
}
я вроде со структурой знаком но такую запись вижу в первые, например мне не понятно почему массив ar объявлен за скобками и как он работает, а ещё внутри структуры не понята эта строка struct list_ele* pointer; и потом так-же указываем struct list_ele* lp; В общем не очень понятный код, прошу объясните если не сложно. Спасибо!
Ответы (1 шт):
struct list_ele {
int data;
struct list_ele* pointer;
} ar[3];
int data - данные в списке
struct list_ele* pointer - указатель на следующий элемент списка
ar[3] - объявлении массива list_ele размерности 3 как глобальная переменная
Я так полагаю, здесь больше проблема в понимании работы списков или массивов, нежели в чем-либо еще
Это, как мне кажется, очень странно написанный код, но каждый элемент указывает на следующий в списке, то есть, обращаясь к list->next_element вы сможете обратиться к следующему элементу в списке
Пример:
//Допустим, объявили массив int[] a = new int[3]
a[2] = 1;
Эквивалентно:
for (int i = 0; i < 2; i++)
a = a->pointer;
a->value = 1;
То есть за два шага цикла мы добрались до 3го элемента массива
Если вопрос состоит зачем здесь объявлен ar[3] - я не знаю. Вы и так сможете добраться до любого элемента списка и здесь объявление массива, как по мне, является ненужным костылем