Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Чисто филосовский вопрос, Массивы 
V
    Опции темы
mrbrooks
Дата 19.12.2006, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 2
Всего: 306



Комрады я вот не догоняю в чем проблема 
если сделать так:
int arr[5][5], * parr;

parr = &arr[0][0];

компилятор утверждает что я реальный пацан, но если 

parr = arr; 

посылает меня к чертовой матери. Парадокс!
PM MAIL   Вверх
bsa
Дата 19.12.2006, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Все правильно.
arr - это указатель на int[5] (на массив из массивов из пяти интов)
а parr - это указатель на массив из интов
тебе нужно объявлять parr, как int *(par[5]) (или без скобок, проверять лень, а подобные конструкции никогда не использую, так как ненужны).
PM   Вверх
mrbrooks
Дата 19.12.2006, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 2
Всего: 306



гыгы. комрад bsa вы опустили профессора Хомоненко. Это его фишка - мол если с одномерными работает так то и с многомерными будет по анологии. 
PM MAIL   Вверх
Solomon
Дата 19.12.2006, 17:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 471
Регистрация: 23.1.2006
Где: Украина Киев

Репутация: нет
Всего: 2



Цитата(bsa @  19.12.2006,  15:37 Найти цитируемый пост)
тебе нужно объявлять parr, как int *(par[5]) (или без скобок, проверять лень, а подобные конструкции никогда не использую, так как


это не изменит ниче. Вопрос не втом то был.


mrbrooks, у тебя parr это указатель, ему нельзя присвоить значение переменной, ему присваивается адресс переменной с помощью оператора &.(как ты делаеш в первом случае). А во втором случае получается parr ждет адресс в памяти, а ты ему пытаешся впихнуть значение переменно. вот и матюгается

Добавлено @ 17:59 
mrbrooks, или я неправельно вопроспонял?  smile 


--------------------
Если не идти до конца к поставленным целям и не пытатся их достигнуть, каким бы тяжелым не казался путь, то лучше и не ставь их перед собой, но тот кто не ставит перед собой труднодоступные цели, никогда не ощутит эйфорию настоящей победы... победы над миром...
Соломон 2008
PM MAIL ICQ GTalk YIM   Вверх
Partizan
Дата 19.12.2006, 18:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 4
Всего: 67



[censored 6]....
Код

int arr1[5][5];// int **arr1
int *arr2;
int x;

arr2 = &x//указывает на int...что и было написано при задании типа...
arr2 = arr1 //указывает на int* то бишь либо arr2 у нас должен иметь тип int **...либо  arr1 надо преобразовывать...например так arr2 = ( int* ) arr1;
 


и ничто не мешает нам это сделать....(я о преобразовании arr2 = (int*) arr1)
ибо что здесь что там должен лежать адрес....

Добавлено @ 18:04 
Цитата(Solomon @ 19.12.2006,  17:58)
 А во втором случае получается parr ждет адресс в памяти, а ты ему пытаешся впихнуть значение переменно. вот и матюгается

а вот и нет...
во втором случае arr = это адрес переменной с индексами [0][0] ака начало массива...


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Xenon
Дата 19.12.2006, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1529
Регистрация: 12.4.2006

Репутация: 11
Всего: 50



Partizan, то есть по-твоему это должно работать?
Код

    int arr[5][5];
    int** parr;
    parr=arr;


Код

error C2440: '=' : cannot convert from 'int [5][5]' to 'int **'


Это сообщение отредактировал(а) Xenon - 19.12.2006, 18:15


--------------------
user posted image  
PM MAIL   Вверх
Partizan
Дата 19.12.2006, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 4
Всего: 67



Xenon, всё правильно...ошибка с моей стороны...


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
FunnyFalcon
Дата 19.12.2006, 18:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 27.3.2006

Репутация: нет
Всего: 7



Код

    int arr[5][5];
    int (*parr)[5];
    parr=arr;

А так?
PM MAIL   Вверх
mrbrooks
Дата 19.12.2006, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 2
Всего: 306



To Solomon
В документации сказано что при работе с массивами и указателями код (к примеру) имеет вид:

int mass[5][5],*parr;

либо  parr = &mass[0][0] либо parr = mass -  что типа одно и то же - компилятор так должен это воспринимать. Дескать начало массива. Здесь коллега Partizan абсолютно прав. Иначе спорить прошу к старине Бьерну =).

Вот для массива:

int mass[5],*parr;

и parr = mass и parr = &mass[0] - действует безотказно.

To FunnyFalcon

Хорошая идея. Стоит попробывать.

Это сообщение отредактировал(а) mrbrooks - 19.12.2006, 20:10
PM MAIL   Вверх
mrbrooks
Дата 19.12.2006, 20:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 2
Всего: 306



To FunnyFalcon & bsa и конечно же Partizan!
 Спасибо за советы! Все получилось! 

Это сообщение отредактировал(а) mrbrooks - 19.12.2006, 20:54
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0701 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.