2014-10-15 4 views
0
struct Node { 
     int data;  // The data being stored at the node 
     Node *next;  // Pointer to the next node 
     }; 

int main() 
{ 
     Node **nodeArray = new (Node*)[5]; 
} 

Первый вопрос:Создать массив указателей узлов

Является ли заявление в основной действительный способ создать массив 5 Node * «s?

В чем разница между заявлением в главном и Node **nodeArray = new Node*[5];? Main в настоящее время дает мне ошибку: запрет массива запрещен после вложенных слов типа-id |

Второй вопрос:

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

+0

Вы не должны иметь круглые скобки 'Node *' после 'new'. – ooga

+0

Лучше использовать 'std :: vector ' (или 'std :: vector >'). – Jarod42

ответ

3

Если вы знаете, что вам нужен максимум 5 пунктов, вы должны использовать статическое выделение, потому что это быстрее, и вам не нужно беспокоиться о освобождении массива.

Node* array[SOME_CONST]; 
for (int i=0; i < SOME_CONST; i++) 
{ 
    array[i] = new Node() 
    cout<<array[i]; 
} 

Для динамически выделенных массивов в значительной степени то же самое, вы просто должны понимать указатель новых возвращений указывает на первый элемент массива.

Node** array = new Node*[some_num]; 
for (int i=0; i < some_num; i++) 
{ 
    array[i] = new Node(); 
} 

Не забудьте освободить правильно:

+0

Я получаю сообщение об ошибке при попытке вашего нового заявления. Пожалуйста, посмотрите мое дополнение к первому вопросу в исходном сообщении. – user3507072

+0

Да, вы правы. Не должно быть(). Я обновлю свой пример. – ventsyv

+0

Ваша динамическая версия массива не компилируется, ошибка для нового оператора в цикле for: нет соответствия для 'operator =' в '* ((* array) + ((sizetype) (((unsigned int) i) * 8u))) = (Node *) оператор new (8u) '| – user3507072

1
  1. Да.

  2. Просто обведите свой 5 Node* и назначьте каждому из них new Node. Или, если вы пытаетесь сделать связный список, может назначить каждую из них к следующему из 5

+0

Я ценю ваш ответ. Что же делает мое текущее заявление в основном? Я думал, что просто сделал 5 указателей на узел. – user3507072

+0

Да, он делает указатель на массив из 5 указателей на узел ... но эти указатели пока ничего не указывают. –

+0

Существует вопрос о том, что здесь: http://stackoverflow.com/questions/16546319/dynamic-allocation-of-array-for-array-of-pointers – ventsyv

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