Форум программистов «Весельчак У»
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
Начало
Наши сайты
Галерея
Весельчак У
Наша Вики
Хранилище
Проекты
Правила
Правила форума
Правила русского языка
Помощь
Поиск
Календарь
Почта
Войти
Регистрация
Форум программистов «Весельчак У»
>
Архив некоторых форумов
>
Архив вопросов по программированию
>
C/C++
>
ANSI С/С++
> Тема:
Параметр функции
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Параметр функции (Прочитано 7599 раз)
0 Пользователей и 1 Гость смотрят эту тему.
nikedeforest
Команда клуба
Offline
Пол:
Параметр функции
«
:
04-12-2004 14:38 »
Почему так происходит
создаю функцию void func (long mass[3][8], long mass1[4][4])
а вот когда подставляю в качестве первого параметра переменную объявленную таким образом
long **mass;
mass=new long*[3];
for(int i=0;i<3;i++)
mass[i]=new long[8];
вываливается ошибка
cannot convert parameter 1 from 'long [3][8]' to 'long'
а если эту переменную объявить во так
long mass[3][8];
то проблем не будет.
«
Последнее редактирование: 19-12-2007 18:31 от Алексей1153++
»
Записан
ещё один вопрос ...
Dimka
Деятель
Команда клуба
Offline
Пол:
Параметр функции
«
Ответ #1 :
04-12-2004 17:35 »
1. Двумерный массив является массивом массивов. В случае, если он у тебя определён явно, компилятор однозначно понимает, что mass[i] является массивом типа long[8] и знает, как с ним работать. В случае long ** он не знает размерности массивов 1-го измерения, поэтому отказывается работать. Но это случай обратный твоему.
2. Ты пытаешься передать данные, преобразовав указатель указателя в массив. В общем случае, при инициализации массива ты мог бы потребовать выделения памяти для иных структур, тогда твой массив мог бы быть раскидан по нескольким несмежным участкам памяти. Конструкция mass[i][j] равнозначна *(*(m + i) + j), т.е. требует размещения массива целиком как непрерывного участка памяти. Поэтому компилятор "защищает" тебя от ошибок памяти, могущих возникнуть преобразования указателя в массив. Компилятор всякий массив рассматривает как указатель, но не рассматривает указатель как массив.
«
Последнее редактирование: 14-04-2006 19:55 от Алексей1153
»
Записан
Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
Параметр функции
«
Ответ #2 :
04-12-2004 18:00 »
nikedeforest
,
делай так:
void func (long** mass, long** mass1) ;
Записан
>FAQ ПО ПРОГР.
>ССЫЛКИ ПО ПРОГР.
>Правила"Неотложки"
nikedeforest
Команда клуба
Offline
Пол:
Параметр функции
«
Ответ #3 :
04-12-2004 22:01 »
не, это понятно, что так надо делать, мне причина непонятна была, думал вроде массив он и в Африке массив, оказалось, что нет
Записан
ещё один вопрос ...
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
Параметр функции
«
Ответ #4 :
05-12-2004 06:33 »
nikedeforest
, потому что все массивы - одномерные
А если собрать в кучу - получаются многомерные.
long** L; - это переменная типа "указатель на указатель на тип long" или типа "указатель на на тип long*". То есть она может указывать на одномерный массив переменных типа:
long*
каждая переменная
long* Ln - это переменная типа "указатель на тип long" , то есть может указывать на массив переменных типа long.
одномерный массив одномерных массивов - получается двумерный массив
Записан
>FAQ ПО ПРОГР.
>ССЫЛКИ ПО ПРОГР.
>Правила"Неотложки"
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Форум программистов «Весельчак У»
>
Архив некоторых форумов
>
Архив вопросов по программированию
>
C/C++
>
ANSI С/С++
> Тема:
Параметр функции
Загружается...