Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.09.2010, 22:06   #1
askar
 
Регистрация: 13.03.2009
Сообщений: 7
По умолчанию Массив указателей

Привет всем, есть один маленький вопрос. Есть несколько двумерных массивов. Создаю ещё один массив mx. В нём хранятся адреса первого элемента каждого из 10 массивов. Как правильно объявить массив mx?
Знаю, что надо то ли скобки поставить, то ли ещё что-то, но что конкретно - понять не могу. Помогите разобраться.
Код:
 
        int A1[7][7];
        int A2[7][7];
	int A3[7][7];
	int A4[7][7];
	int A5[7][7];
	int A6[7][7];
	int A7[7][7];
	int A8[7][7];
	int A9[7][7];
	int A10[7][7];
        int *mx[] = {NULL, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10};
askar вне форума Ответить с цитированием
Старый 07.09.2010, 22:12   #2
Syuf
Форумчанин
 
Аватар для Syuf
 
Регистрация: 02.02.2010
Сообщений: 599
По умолчанию

Как вариант:
Код:
int A1[7][7];
        int A2[7][7];
	int A3[7][7];
	int A4[7][7];
	int A5[7][7];
	int A6[7][7];
	int A7[7][7];
	int A8[7][7];
	int A9[7][7];
	int A10[7][7];
        int *mx[] = {NULL, &A1[0][0], &A2[0][0], &A3[0][0], &A4[0][0], &A5[0][0], &A6[0][0], &A7[0][0], &A8[0][0], &A9[0][0], &A10[0][0]};
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."
Syuf вне форума Ответить с цитированием
Старый 07.09.2010, 22:27   #3
askar
 
Регистрация: 13.03.2009
Сообщений: 7
По умолчанию

Syuf, можно сделать и так, но мне нужно чтоб поменялось само объявление mx,
вот например int (*mx)[7][7] - указатель на двумерный массив из 7 строк и 7 столбцов. А если скобки убрать int *mx[7][7], то это уже будет двумерный массив указателей.
И ещё: когда пишу int **Arr = A2, компилятор выдаёт ошибку, что нельзя преобразовать. А если сделать int **Arr = (int**)A2, то всё проходит. Почему так? И чем вообще чревато такое явное преобразование типа?
askar вне форума Ответить с цитированием
Старый 07.09.2010, 22:43   #4
Syuf
Форумчанин
 
Аватар для Syuf
 
Регистрация: 02.02.2010
Сообщений: 599
По умолчанию

Так что вам надо в mx хранить?
Цитата:
В нём хранятся адреса первого элемента каждого из 10 массивов
Если указатели на первые элементы массивов, то есть int*, то подойдет тот вариант.
Арифметика указателей при этом не меняется.
Если надо укзатели на массивы, то у вас уже все написано:
Цитата:
int (*mx)[7][7] - указатель на двумерный массив из 7 строк и 7 столбцов
Насчет (int**)A2, наверное, вполне адекватен вариант:
Цитата:
int **Arr = (int**)A2;
Но я бы попробовал так:
Код:
int **Arr = &A2;
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."
Syuf вне форума Ответить с цитированием
Старый 07.09.2010, 23:00   #5
askar
 
Регистрация: 13.03.2009
Сообщений: 7
По умолчанию

мне нужно объявить массив указателей на двумерные массивы из 7 строк и 7 столбцов. Это мне надо чтобы быстро обращаться к любому из тех 10 массивов. Хотя можно думаю и проще всё это сделать, больно я намудрил тут.
Насчёт
Код:
int **Arr = &A2
компилятор ругается, говорит не может преобразовать. По идее же А2 - это есть адрес первого элемента массива А2, правильно ведь? А зачем вы тогда к нему операцию взятия адреса применяете?
askar вне форума Ответить с цитированием
Старый 07.09.2010, 23:11   #6
askar
 
Регистрация: 13.03.2009
Сообщений: 7
По умолчанию

Попробовал для проверки сделать вот что:
Код:
int B[5] = {0,1,2,3,4};
	int *pB = B;
	int **pA = A;
Компилятор ругнулся только на последнюю строку кода. Выдал следующее: cannot convert from 'int [7][7]' to 'int **'
Получается имя одномерного массива - это указатель на тип int, а имя двумерного массива - это уже не указатель на указатель на тип int, а что-то другое чтоли?
askar вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
массив указателей RUSt88 Общие вопросы C/C++ 12 10.01.2010 11:11
массив указателей в С ++ серг Помощь студентам 1 14.12.2009 18:49
Массив указателей (паскаль) diliana Помощь студентам 19 14.11.2009 11:53
Массив указателей на структуры SNAKE89 Общие вопросы C/C++ 4 27.12.2007 10:14