2014-12-01 2 views
-1

Я пытаюсь создать указатель, который указывает на предыдущий и следующий элементы. Я также хочу, чтобы каждый элемент содержал массив. Как определить это в классе и/или добавить массив элементов спискаC++ Как заставить указатели указывать на массивы?

class codes { 
    public: 
     int code[]; 
     codes* next; 
     codes* previous; 
};//codes 

void addtolist(codes* & entrance, int k[]) { 
    codes* c; 
    c = new codes; 
    c->code[] = k; 
    c->next = entrance; 
    if(c->next != NULL){ 
     c->next->previous=c; 
    }//if 
    c->previous = NULL; 
    entrance = c; 
}//addtolist 
+0

Пожалуйста, прочитайте несколько книг –

+0

Просто используйте указатель, указатель может указывать на одно или несколько значений, например. массив. – mukunda

ответ

2

Вы создаете указатель на какой-то объект класса, как это:

SomeClass *ptr = new SomeClass(); 

или

SomeClass a; 
SomeClass *ptr = &a; 

Чтобы определить массив внутри вашей структуры, сделайте внутри своей структуры:

int arr[32]; 

Просто обратите внимание, что это массив размеров. Если вы хотите массив с динамическим размером провозглашают:

int * arr; 

внутри своей структуры, а затем в какой-то момент, чтобы она указывала на объекты массива:

obj.arr = new int[SIZE]; 

Вы должны вызвать delete[] в выше случай когда сделано с массивом. Это может быть сложно (см. here), чтобы иметь класс, который управляет динамической памятью внутри, вы можете предпочесть массив с фиксированным размером.

член Do мудрая копия элементов массива вместо этого:

c->code[] = k; // You can't assign like this since code is not a pointer 
+0

Он модифицирует параметр «вход», поэтому ему необходимо передать ссылку в текущем коде. – Slava

+0

@Slava: Хорошо, я вижу это сейчас, я изменю –

2

Массив представляет собой указатель рода уже. В C/C++, если у меня есть массив:

int arr[10] 

затем доступ к массиву

arr[2]; 

это просто еще один способ разыменованного доступа указателя

*(arr + 2); 

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

int getSecond(int* a) { 
    return a[2]; 
} 
getSecond(arr); 

Итак, если вы c деваха держит массив, время жизни управляется где-то еще, все, что вам нужно, это указатель:

class codes { 
    public: 
     int* code; 
     codes* next; 
     codes* previous; 
};//codes 

Теперь, если вы хотите, чтобы ваш класс коды на самом деле управлять временем жизни массива, или скопировать значения в класс, вам нужно будет сделать дополнительную работу.

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