Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > С/С++
Перезагрузить страницу Несовместимость указателей двух- и одномерных массивов
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
EiTRoN EiTRoN вне форума
Member
 
Сообщений: 23
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 09.05.2004
По умолчанию Несовместимость указателей двух- и одномерных массивов - 17.05.2004, 19:47

Здравствуйте. У меня снова вопрос, т.к. многие авторы книг по C++ не удосужились рассмотреть для двух- и трёхмерных матриц случаи, возникающие с одномерными.
А проблема в том, что я не могу присвоить элементу одномерного массива tnp[] значение из двухмерного matrix[][].

Код:
//Объявление двухмерной матрицы
char** matrix = new char*[m];
    for (i = 0; i < m; ++i)
  matrix[i] = new char[n];

//Временный одномерный массив
char* tnp = new char[n];

//Закавыка
tnp[j] = matrix[i][j]; //Ошибка после компиляции. Expression cannot be evaluated.
Я понимаю, что разница в типах tnp и matrix, но исправить баг не получается. Заранее спасибо.
Ответить с цитированием
  (#2 (permalink)) Старый
Olesya Olesya вне форума
Member
 
Сообщений: 1,485
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 11.06.2002
По умолчанию 17.05.2004, 21:33

А j в товремя когда когда возникает ошибка чему равно?
Ответить с цитированием
  (#3 (permalink)) Старый
EiTRoN EiTRoN вне форума
Member
 
Сообщений: 23
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 09.05.2004
По умолчанию j = 0 - 18.05.2004, 21:11

j = 0. Но, по-моему, не в этом дело. Кстати, i = 0 тоже.
Ответить с цитированием
  (#4 (permalink)) Старый
Olesya Olesya вне форума
Member
 
Сообщений: 1,485
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 11.06.2002
По умолчанию Re: j = 0 - 18.05.2004, 23:25

Если верить твоему коду, тогда в на этой злощзасной строчке і должно равнятся m. Так что хорошо рекомендую отлаживать нормально!
Ответить с цитированием
  (#5 (permalink)) Старый
Anonymous
Guest
 
Сообщений: n/a
По умолчанию RERERE - 19.05.2004, 20:10

Sorry, вас ввела в заблуждение строка
Код:
tnp[j] = matrix[i][j]; //Ошибка после компиляции. Expression cannot be evaluated.
Моя вина. На самом деле всё выглядии вот так. Всё-таки, здесь дело не в i или j...

Код:
    for (j = 0; j < m; j++)
    {
  for (i = j + 1; i < m; i++)
  {
      if ((int)key1[j] > (int)key1[i])
      {
    nOrder[j] += nOrder[i];
    nOrder[i] =  nOrder[j] - nOrder[i];
    nOrder[j] -= nOrder[i];
      }
  }
    }
EiTRoN++
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
EiTRoN EiTRoN вне форума
Member
 
Сообщений: 23
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 09.05.2004
По умолчанию 19.05.2004, 20:15

А, чёрт, прошлое сообщение неверно!

Sorry, вас ввела в заблуждение строка
Код:
tnp[j] = matrix[i][j]; //Ошибка после компиляции. Expression cannot be evaluated.
Моя вина. На самом деле всё выглядит вот так. Всё-таки, здесь дело не в i или j...


Код:
    for (i = 0; i < m; i++)
    {
  if (nOrder[i] != i)
  {
      for (j = 0; j < n; j++)
      {
    tnp[j] = matrix[i][j];
    matrix[i][j] = matrix[nOrder[i]][j];
    matrix[nOrder[i]][j] = tnp[j];
      }

  }
    }
EiTRoN++
Ответить с цитированием
  (#7 (permalink)) Старый
Yttrium Yttrium вне форума
Member
 
Сообщений: 74
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 02.09.2003
По умолчанию 20.05.2004, 02:03

А в nOrder наверное есть числа выходящие за диапазон
Ответить с цитированием
  (#8 (permalink)) Старый
EiTRoN EiTRoN вне форума
Member
 
Сообщений: 23
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 09.05.2004
По умолчанию 1d = 2d; //compile error! - 20.05.2004, 15:28

То ли лыжи не едут, то ли... Одно из двух.

Ошибка в этой строчке
Код:
tnp[j] = matrix[i][j];
. И возникает она из-за того, что tnp - одномерный массив, а matrix - двухмерный! Как их типы привести к одному, не подскажите? Именно привести, а не проверять i, j и nOrder. Заранее спасибо.

EiTRoN++
Ответить с цитированием
  (#9 (permalink)) Старый
Olesya Olesya вне форума
Member
 
Сообщений: 1,485
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 11.06.2002
По умолчанию Re: 1d = 2d; //compile error! - 20.05.2004, 20:17

Цитата:
Originally posted by EiTRoN
[b]Ошибка в этой строчке
Код:
tnp[j] = matrix[i][j];
. И возникает она из-за того, что tnp - одномерный массив, а matrix - двухмерный!
Что то вы, батенька, уже загнались!
А ну ка код полностью в студию.
Ответить с цитированием
  (#10 (permalink)) Старый
EiTRoN EiTRoN вне форума
Member
 
Сообщений: 23
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 09.05.2004
По умолчанию Проблема затягивается... - 20.05.2004, 20:43

Что то вы, батенька, уже загнались!
А ну ка код полностью в студию.

В Visual?

Дайте мыло, пришлю, да и не доделан он - жду, когда же помогут всеведущие прогеры с прогз.ру.

EiTRoN++

P.S. Я пишу "табличное шифрование", как с лёгкой руки его окрестил.
Ответить с цитированием
  (#11 (permalink)) Старый
Olesya Olesya вне форума
Member
 
Сообщений: 1,485
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 11.06.2002
По умолчанию Re: Проблема затягивается... - 20.05.2004, 23:13

Давай на romanl-l(собака)ukr.net кинь.
Ответить с цитированием
  (#12 (permalink)) Старый
Anonymous
Guest
 
Сообщений: n/a
По умолчанию 21.05.2004, 12:20

У тебя все с самого начала неправильно. **- говорит не о том, что у тебя двумерный массив, это указатель на указатель. Что бы все у тебя зашуршало объявляй двумерный массив так:

char *point=new point[кол_столбцов*кол_строк]

И обращайся так:

*point[i*j]=....; - это равносильно point[i][j];
Ответить с цитированием
Ads
  (#13 (permalink)) Старый
Yttrium Yttrium вне форума
Member
 
Сообщений: 74
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 02.09.2003
По умолчанию 22.05.2004, 03:00

Цитата:
**- говорит не о том, что у тебя двумерный массив, это указатель на указатель
Страустрапа хотябы читал???

Цитата:
char *point=new point[кол_столбцов*кол_строк]

И обращайся так:

*point[i*j]=....; - это равносильно point[i][j];
Такого бреда ещё не видел. Во первых зачем разыменовывать элемент вектора если он не указатель. Во вторых если обращаться к элементу с координатами [2][1] то ОН ЖЕ, будет расположен в координатах [1][2] при такам методе ты получаеш диагонально зеркальную матрицу
Ответить с цитированием
  (#14 (permalink)) Старый
Anonymous
Guest
 
Сообщений: n/a
По умолчанию 26.05.2004, 13:36

А через дополнительные динамические переменные пробовал присваивание?
Ответить с цитированием
  (#15 (permalink)) Старый
Anonymous
Guest
 
Сообщений: n/a
По умолчанию Читайте MSDN - 31.05.2004, 18:06

Все же проблема здесь решается следующим образом:
двойной указатель ** объявлен char типа, а это и значит, что объявлен двумерный массив. Чтобы получить доступ к строке массива **matrix достаточно сделать следующее действие:
tnp = matrix[i];
если же нужно посимвольное присваивание, то надо написать процедуру копирования одной строки в другую.
for(i=0; i<n; i++)
tnp[i]=matrix[0][i];//в этом месте была ошибочка
Все проверено в Visual C++ 6.0
Ответить с цитированием
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка одномерных массивов palemupro Pascal 1 01.12.2011 20:19
Обработка одномерных массивов adidasik Pascal 1 01.06.2011 14:47
Обработка одномерных массивов Опохмелкин Visual Basic 5 01.12.2010 20:50
Как найти наибольшую общую последовательность для двух числовых массивов viktorr C++ Builder 4 22.05.2010 18:10
Обработка одномерных массивов данных Dimon278 Pascal 7 14.12.2009 03:03
Несовместимость двух плат lacoste Память 4 15.10.2009 01:00
Быстрый Алгоритм сравнения двух массивов AcerExtensa С/С++ 6 21.07.2008 11:38
Создание двух динамических массивов qqeeaaddzzcc С/С++ 6 23.05.2008 17:27
Объединение двух массивов Horror Алгоритмы 6 27.11.2007 18:01
Сравнение двух массивов в Excel'e edgar Visual Basic 2 20.08.2007 17:33
Конкатенация двух численных массивов Amputator Pascal 4 16.04.2006 20:01
TFileStream создание двух динамических массивов Ал-леша C++ Builder 3 01.06.2005 10:38



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов