2012-05-27 3 views
0

Итак, вот мой вопрос, поскольку я искал через Интернет какое-то время, но, похоже, не получил четкого ответа, чтобы заставить его работать. Я работаю над созданием простой игры sokoban на C++ с помощью консоли.Передача 2D-массива функции в C++

Прежде всего, я уверен, что передать массив в функцию из-за интенсивности памяти, если это большой массив, не рекомендуется. Все хорошо и хорошо, это не должно быть проблемой, поскольку у меня есть максимум до 32x41, и я даже не собираюсь добираться до максимума. Так должен ли я передать весь массив или я должен пропустить указатели?

Во-вторых, размер моего массива не всегда одинаковый. Я не уверен, что это важный фактор или нет.

В-третьих, если я собираюсь передать указатели, как мне создать/инициализировать их, прежде чем я начну работать с ними. Мой массив был создан следующим образом:

string line; 
string arr[30]; 
int i = 0; 
char mazeArr[30][40]; 
int k, count; 

if (mazeStream.is_open()) 
{ 
    while (mazeStream.good() && !mazeStream.eof()) 
    { 
     getline (mazeStream,line); 
     cout << line << endl; 
     arr[i] = line; 
     i++; 
    } 
    mazeStream.close(); 
    cout << endl; 
} 

else cout << "Unable to open file"; 

for (count = 0; count < 12; count ++) 
{ 
    string::const_iterator iterator1 = arr[count].begin(); 
    k = 0; 

    while (iterator1 != arr[count].end()) 
    { 
     mazeArr[count][k] = *iterator1; 
     iterator1++; 
     k++; 
    } 
} 

теперь, что я хотел бы сделать с этим 2D массива:

  • взять один элемент в то время, и создать экземпляр класса, в зависимости на символе в массиве
  • места экземпляра в другой массив, который принимает экземпляр его типа

Таким образом, в конце концов, я в конечном итоге со вторым массивом экземпляров, где EAC h экземпляр зависит от символа, который я взял из первого массива. сохраняя при этом одни и те же «координаты»

Любая помощь будет высоко оценена,

Благодарности

+1

Проверьте это: http://stackoverflow.com/questions/6648828/passing-2d-array-as-argument – chris

+1

Возможный дубликат [Как использовать массивы в C++?] (Http://stackoverflow.com/вопросы/4810664/как-делать-я-потребительные массивы-в-с) –

ответ

0

Я хотел бы сделать что-то вдоль линий этого:

char **createMaze(width, height) 
{ 
    // Dynamically allocate memory creating a pointer array of pointers 
    char **maze = new char*[width]; 

    // Loop to allocate memory for each pointer array 
    for(int i = 0; i < width; i++) 
     maze[i] = new char[height]; 

    return maze; 
} 

int main() 
{ 
    width = 40; 
    height = 30; 
    char **maze = createMaze(40, 30); 

    // You can now access elements from maze just like a normal 
    // 2D array maze[23][12] - You can also pass this into 
    // a function as an arugment  

    return 0; 
} 

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

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