2016-03-04 3 views
0

У меня есть 2D массив следующим образом:Access индекс строки 2D массива из указателя строки

struct tab **table; 
table = new tab*[n+1]; 
for(int i = 1; i < n+1; i++) 
    table[i] = new tab[n+1]; 

Теперь у меня есть указатель на какой-то строки массива 2D в tab* start = table[10]. Мое сомнение в том, что я говорю о функции и передаю начало в качестве аргумента. Тогда как я могу получить индекс строки (т. Е. 10 в этом случае) таблицы, используя start?

+2

Я предполагаю, что единственный способ узнать строку - это повторить 2D-массив и проверить, равен ли указатель строки пройденному. – Neijwiert

+0

Почему бы не сделать класс для этого в любом случае? упростить поиск? – Neijwiert

+0

@Nandini Singhal Вы не можете. Элемент массива не имеет информации о его позиции в массиве. Вы должны передать индекс отдельно к функции. –

ответ

0

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

Но, возможно, это не то, что вы хотите .... обратите внимание, что таблица [10] и & таблица [10] - это разные вещи.

Поскольку вы используете указатель на указатель, вы можете использовать смещения, чтобы получить индекс любого элемента tab [index]. Это столбцы в вашем двумерном массиве, выделенные table = new tab*[n+1], хранящиеся в непрерывной памяти. Каждое из этих мест содержит вкладку *, поэтому строки вашей матрицы.

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