2013-05-24 4 views
0

У меня есть матрица 1 * 5Получить следующий указатель строки матрицы

я определил:

int **mat = new int*[5]; // define the matrix 

int* ptr = *mat; 

ptr++ дает мне указатель на следующую строку матрицы.

Я хочу получить указатель второго элемента первой строки (местоположение [0] [1]).

как я могу это сделать?

+0

'(* PTR) + 1', или вы' ер = * ptr' затем марш по элементам строки с помощью '* ер ++'. – lurker

+1

Матричные элементы должны быть просто 'mat [i] [j]', но вы должны сначала выделить память для каждой строки ... –

+0

Вы говорите, что вам нужна матрица 1X5, поэтому вы должны иметь только 1 строку. Как вы можете получить доступ к следующей строке при использовании 'ptr ++'? Если вы попытаетесь получить к нему доступ, это будет ошибка seg. Вы должны попробовать опубликовать [SSCCE] (http://sscce.org/) – srikanta

ответ

1

C и C++ не имеют многомерных массивов. Таким образом, чтобы сделать это, вам придется делать дополнительные ассигнования:

Во-первых, выделить память:

int rows = 1; 
int columns = 5; 

int** mat = new int*[columns]; 
for(int i = 0; i < columns; ++i) 
{ 
    mat[i] = new int[rows]; 
} 

Index Ваша матрица:

int x = 1; // Column number, x-movement 
int y = 0; // Row number, y-movement 
//mat[x][y] = ???; 

Не забывайте, что свободной памяти вы выделили:

for(int i = 0; i < columns; ++i) 
{ 
    delete [] mat[i]; 
} 
delete [] mat; 

Или, используйте std :: vector. Это гораздо проще в использовании и понять:

#include <vector> 

int rows = 1; 
int columns = 5; 

std::vector<std::vector<int > > mat = std::vector<std::vector<int > >(); 
mat.resize(columns); 
for(int i = 0; i < 5; ++i) 
{ 
    mat[i].resize(rows); 
} 

//mat[1][0] = 100; 
+0

Кроме того, указателем на второй элемент первой строки будет & mat [1] [0] –

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