![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Dov |
|
|||
![]() аСинизатор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1721 Регистрация: 10.5.2003 Где: Эрец-Исраэль Репутация: 15 Всего: 88 |
Fazil6, если тебе так сильно хочется поспорить или, что было бы лучше, поучиться чему-нибудь хорошему, то открой соответсвующую тему, зачем же здесь оффтопить.
По поводу этого. попробуй так:
Ну, а по поводу передачи двумерного массива в ф-цию в качестве аргумента, и здесь на форуме и в инете полным полно разных примеров. Нужно только поиском пользоваться. -------------------- Тут вечности запах томительный, И свежие фрукты дешевые, А климат у нас – изумительный, И только соседи – #уевые. Игорь Губерман. |
|||
|
||||
| vinter |
|
||||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
так делать нельзя, они физически в памяти по разному расположены как ты себе представляешь обращение к элементам? вспоминаем арифметику указателей и понимаем почему написали ерунду.
тебе бы как раз не мешало бы их поочитать, прежде чем так яростно спорить |
||||
|
|||||
| Dov |
|
|||
![]() аСинизатор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1721 Регистрация: 10.5.2003 Где: Эрец-Исраэль Репутация: 15 Всего: 88 |
Блин, да что за день сегодня такой. vinter, ты вопрос читал? Изначально вопрос звучал так: Я показал, что скомпилится. А описать указатель на двумерный массив можно так, например.
-------------------- Тут вечности запах томительный, И свежие фрукты дешевые, А климат у нас – изумительный, И только соседи – #уевые. Игорь Губерман. |
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
нет, я читал вашь спор, и исходил только из него. |
|||
|
||||
| FiMa1 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 408 Регистрация: 23.9.2006 Репутация: 5 Всего: 6 |
Dov, вопросик в догонку - а как выполняется прведение указателя на указатель к у просто указателю.. я не нашел.. Ну в приведении double к int понятно дробная часть откидывается, а здесь не пойму как это срабатывает.. Подскажи плз. |
|||
|
||||
| Fazil6 |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
ты без конца отправляешь меня учиться чему-то (правда ты не говоришь чему именно). Я по твоему, ничего не понимаю, но внятно свою позицию ты отстоять не можешь. По твоему если я не согласен с высказываемыми тобой суждениям , то это офтоп? Мне кажется, что я могу доказать, что ты не прав, а добиться каких-то внятных объяснений почему я не прав от тебя я не могу. Постоянно отсылаешь к книгам... Можешь привести пример книги хоть одной, которая по твоему откроет мне глаза на проблемы многомерных массивов и связанных с ними указателей? Dov, Я привел конкретный пример и спрашиваю "почему он не компилится?" Я не спрашиваю "как его скомпилировать?" Чувствуешь разницу? reinterpret_cast - это ложь компилятору и с его помощью можно заставить много чего скомпилироваться. если исправить, то скомпилится , но если
|
||||
|
|||||
| apook |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 794 Регистрация: 12.7.2006 Репутация: 9 Всего: 23 |
Прекращайте этот непонятный спор, я не доволен вашим поведением
это что-за тон, кто вам показал дурацкий пример наезжать друг на друга. -------------------- Мои руки из дуба, голова из свинца ну и пусть ... |
|||
|
||||
| JackYF |
|
||||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
Эта фраза мне определенно нравится... Имхо, правда больше на стороне Fazil6 здесь.
Массив вообще не имеет законченного типа, а уж тем более int**. Этот факт тоже не один раз проскакивал и выяснялся в темах. Dov, имхо, ты не прав. Это сообщение отредактировал(а) JackYF - 22.4.2007, 00:27 |
||||
|
|||||
| Dov |
|
||||||||
![]() аСинизатор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1721 Регистрация: 10.5.2003 Где: Эрец-Исраэль Репутация: 15 Всего: 88 |
JackYF, в чём я не прав? В этом? Так я этого никогда не говорил. Я говорил только про имя массива, которое содержит адрес первого элемента массива, т.е. является указателем. Если массив состоит из элементов типа int, то имя массива имеет тип int*, т. е является указателем на тип int.
Отсюда следует, что и &ar[0] и ar имеют тип int*, т.к. являются адресами. Абсолютно то же самое можно сказать и про двумерный массив, который, по сути, является одномерным массивом, каждый элемент которого так же является одномерным массивом, и про трёхмерный и т.д.
И в том, и в другом случае имя массива имеет тип char**, так как содержит адрес первого элемента массива, который в свою очередь имеет тип char*. Разыменуем и тот и другой и посмотрим:
Оба выдают одинаковый результат. Доступ к элементам абсолютно идентичен. Можно объявить этот массив и так, это ни на что не повлияет:
Показал на пальцах, но уж извиняйте, как смог. Добавлю только, что многие не понимают разницу между массивом и именем массива. Имя массива - это указатель, хотя и константный, но всё же указатель. Почему? Да хотя бы потому, что содержит адрес, а адреса могут хранить только указатели. Массив - это последовательность элементов одного и того же типа, имеющих одно имя. Отсюда следует, что имя массива это только часть массива, и что оно указывает на начало массива. За сим откланиваюсь и иду спать, ибо лучше объяснить не смогу. -------------------- Тут вечности запах томительный, И свежие фрукты дешевые, А климат у нас – изумительный, И только соседи – #уевые. Игорь Губерман. |
||||||||
|
|||||||||
| FiMa1 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 408 Регистрация: 23.9.2006 Репутация: 5 Всего: 6 |
Модератор: Сообщение скрыто. |
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
Нет. Не имеет. Читаем Страуструпа и/или стандарт. Нет, отсюда это не следует. Я тебе могу написать свой произвольный класс, который будет имитировать точно такое же поведение (возвращение элементов по индексу). Но у него явно не будет тип int* Ха. Это ты к первому элементу матрицы так можешь обратиться через [0][0], так как смещений нет. Постараюсь показать, что a[x][y] не имеет тип int** Следующий код принципиально неверен:
Вторая часть этого кода работать принципиально не будет. Это сообщение отредактировал(а) JackYF - 22.4.2007, 12:17 |
|||
|
||||
| Xenon |
|
||||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1529 Регистрация: 12.4.2006 Репутация: 11 Всего: 50 |
Следовательно утверждать, что имя массива имеет типа int* нельзя. К тому же похожий пример есть у Страуструпа - стр. 131 Добавлено @ 13:29 И вообще чего мы так спорим, если есть RTTI?
Выдаст int [2], но никак не int*. Это сообщение отредактировал(а) Xenon - 22.4.2007, 13:31 |
||||||
|
|||||||
| Fazil6 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
похоже ты как раз и относишься к тем многим, которые этого не понимают. Все, что ты привел по поводу одномерного массива, его имени и приведения его к указателю правильно, вот только когда речь зашла о двумерном массиве твоя теория поплыла... Причем сильно.... вопервых не имеет тип char** , а может использоваться в таком качестве, но опустим эти лингвистические нюансы - дело намного хуже. ar1 ну никак не char**. И все потому, что кое кто действительно не понимает разницу между массивом и именем массива.
вот именно, и что мы имеем? Имя ar1 это указатель на массив char[4]. Где здесь имя, которое можно представлять как указатель? Запомни : имя двумерного массива интов - это указатель на массив интов, но не как не указатель на указатель на int именно по причине |
|||
|
||||
| Xenon |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1529 Регистрация: 12.4.2006 Репутация: 11 Всего: 50 |
Опять же, RTTI :
Выдает char[3][4]. Нельзя приравнять два разных типа T[] и T* - это хоть и похожие вещи, но на самом деле разные. |
|||
|
||||
| Dov |
|
||||||||||||||||||||
![]() аСинизатор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1721 Регистрация: 10.5.2003 Где: Эрец-Исраэль Репутация: 15 Всего: 88 |
Ух, скока накатали. Сразу говорю, что всё ни асилю.
Оставлю без комментария, хотя этому перлу прямая дорога на башорг, имхо.
JackYF, так я могу обритится к любому этементу матрицы, используя адресную арифметику указателей. Ну, например так:
Каким образом ты это пытался показать, я так и не понял.
То, что код не верен, это правда. Но я опять не понял, что именно не работает? Не компилится или не приводится или вывод не работает или выводит, но не правильно? Что не работает?
Или тебе надо, что бы в виде таблицы выводилось? Скажи "принципиально" Fazil6, весь твой пост оставляю без комментариев, кроме двух фраз, а именно:
Эти, имхо, на башорг адназначна. Да, а по поводу этого:
Я уже говорил, но для тебя ещё раз повторю. ar1 это указатель на первый элемент массива, т.е. на строку(или массив, если хочешь) "qwe". А имя, "которое можно представлять как указатель" звучит так(ты не поверишь) : ar1[0] или *ar1, как тебе больше нравится. Xenon, с тобой я соглашусь, конечно, но только не сейчас. По той причине, что ты не попадаешь в контекст текущей полемики. Здесь идёт разговор о типах данных в плане приведения типов... Что-то устал я уже, не могу правильно сформулировать, но это не важно. Ты в самом начале посмотри и всё поймёшь. Ну, типа того, что так сделать можно:
а так нельзя:
А может и можно, но я не знаю как. Тогда покажи. Камрады! Желаю всем удачи! А я из дискуссии выбываю. Притомился я тут с вами. Всем пока. -------------------- Тут вечности запах томительный, И свежие фрукты дешевые, А климат у нас – изумительный, И только соседи – #уевые. Игорь Губерман. |
||||||||||||||||||||
|
|||||||||||||||||||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |