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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Многомерные массивы и указатели, Как получить адрес элемента массива 
V
    Опции темы
apook
Дата 21.4.2007, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 9
Всего: 23



Вынужден признать что моя решчь может показаться наездом
тада извиняй. Но не надо ни минусов не плюсов это не тот случай
Dov "Черт возьми" надеюсь ты не в обиде.....

Это сообщение отредактировал(а) apook - 21.4.2007, 14:29


--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
Dov
Дата 21.4.2007, 14:28 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 15
Всего: 88



Цитата(apook @  21.4.2007,  14:25 Найти цитируемый пост)
Вынужден признать что моя решчь может показаться наездомтада извиняй. Но не надо ни минусов не плюсов это не тот случай

Принято, проехали.  smile 



--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
Rockie
Дата 21.4.2007, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 8
Всего: 31



Цитата(dizzy1984 @  21.4.2007,  13:46 Найти цитируемый пост)
Насколько я знаю инициализатором переменной в си и си++ выступает любое выражение.

dizzy1984, если сигнатура функции позволяет, то конечно. Но в данном случае
Цитата
Error    1    error C2440: 'initializing' : cannot convert from 'void *' to 'int *





--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
dizzy1984
Дата 21.4.2007, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 3
Всего: 25



Цитата(Rockie @  21.4.2007,  14:37 Найти цитируемый пост)
dizzy1984, если сигнатура функции позволяет, то конечно. Но в данном случае

И в данном случае все верно. Дело в том, что необходимость указания приведения присуща только компиляторам cи++ в си void* приводится к любому другому указателю и без явной указки.
Пардон. Я писал и для того и для другого, тогда, конечно, мой пример работает только для си. Вы правы.

Это сообщение отредактировал(а) dizzy1984 - 21.4.2007, 14:50
PM MAIL   Вверх
Fazil6
Дата 21.4.2007, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 35
Всего: 60



Цитата(Dov @  21.4.2007,  13:49 Найти цитируемый пост)
Имя массива а[][] имеет тип int**, т.е. указатель на указатель на int. Мы его приводим к типу int*

кто тебе сказал? двумерный массив не тоже самое что указатель на указатель
PM MAIL   Вверх
Dov
Дата 21.4.2007, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 15
Всего: 88



Цитата(Fazil6 @  21.4.2007,  15:33 Найти цитируемый пост)
кто тебе сказал? двумерный массив не тоже самое что указатель на указатель

Fazil6, где у меня написано, что двумерный массив это указатель на указатель?  


--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
Fazil6
Дата 21.4.2007, 15:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 35
Всего: 60



Цитата(Fazil6 @  21.4.2007,  15:33 Найти цитируемый пост)
Имя массива а[][] имеет тип int**, т.е. указатель на указатель на int


PM MAIL   Вверх
Dov
Дата 21.4.2007, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 15
Всего: 88



Fazil6, в этой цитате написано, что Имя массива а[][] имеет тип int**, т.е. указатель на указатель на int. Если ты не понимаешь разницу между словами 'массив' и 'имя массива', то почитай какие-нить книжки по этой теме, а потом спрашивай кто мне что сказал.  smile 


--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
Fazil6
Дата 21.4.2007, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 35
Всего: 60



Цитата(Dov @  21.4.2007,  15:51 Найти цитируемый пост)
 Если ты не понимаешь разницу между словами 'массив' и 'имя массива', то почитай какие-нить книжки по этой теме, а потом спрашивай кто мне что сказал.

ну а вот это уже точно наезд... 
И какая же разница в данном случае? Я применил слово массив именно к его имени. И если тебе не нравится формулировка, то имя массива  не тоже самое что указатель на указатель.

это скомпилится?
Код

int a[3][3] = {{0,1,2}, {3,4,5}, {6,7,8}};
int **aa;

void nn(int **){}


int main()
{
    nn(a);
         aa = a;
    aa = static_cast<int**>(a);
    return 0;

}

как ты думаешь?
PM MAIL   Вверх
Dov
Дата 21.4.2007, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 15
Всего: 88



Цитата(Fazil6 @  21.4.2007,  16:01 Найти цитируемый пост)
И какая же разница в данном случае?

Вот видишь, разницу ты не понимаешь. И ещё хочешь о чём-то спорить. Поэтому я тебе и сказал, что бы ты сначала книжки почитал, а потом уже спорил. 



--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
apook
Дата 21.4.2007, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 9
Всего: 23



Осмелюсь вторгнуться в вашу дискуссию чтоб довести до вашего внимания тот факт что имя массива не является переменной.
тогда может ли оно иметь тип? Тип может иметь начальный элемент
массива синонимом расположения в памяти которого я вляется имя
массива, тогда имя массива int а[3][3] имеет тот тип который у а[0] его элемента, а у того тип int a[3], поскольку это не массив указателей, а
именно двумерный массив....или ( smile


--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
FiMa1
Дата 21.4.2007, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 5
Всего: 6



Цитата(apook @ 21.4.2007,  14:12)
зачем вносить путанницу вот этим вариантом.
Код

int *pa[3] = { (int*)a, a[1], a[2] };

он вообще тогда не доделан надо так
Код

int *pa[3] = { (int*)a[0], (int*)a[1], (int*)a[2] };

 smile Может запоздало комментирую, но вышеприведенная фраза непонятна...
И (int*)a[0]  и a[0] и *a и &(a[0][0]) это ОДНО И ТОЖЕ © Dov.
вообще можем написать:
Код

int *pa[4] = { (int*)a[0] , a[0], *a, &(a[0][0]) };

все элементы массива pa - указатели на первый (нулевой) элемент массива a.

Это сообщение отредактировал(а) FiMa1 - 21.4.2007, 16:28
PM   Вверх
Fazil6
Дата 21.4.2007, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 35
Всего: 60



Цитата(Dov @  21.4.2007,  16:16 Найти цитируемый пост)
Вот видишь, разницу ты не понимаешь. И ещё хочешь о чём-то спорить. Поэтому я тебе и сказал, что бы ты сначала книжки почитал, а потом уже спорил. 

не цепляйся к словам. Я коментируя твою фразу и в ней указано имя массива и все сказанное мной относится именно к имени массива.
ок. Принимаем, что я ламер без доказательства. 
как насчет компиляции моего примера? 
Код

int a[3][3] = {{0,1,2}, {3,4,5}, {6,7,8}};
int **aa;

void nn(int **){}


int main()
{
    nn(a);
         aa = a;
    aa = static_cast<int**>(a);
    return 0;

}

в свете того что 
Цитата(Dov @  21.4.2007,  15:51 Найти цитируемый пост)
Имя массива а[][] имеет тип int**, т.е. указатель на указатель на int

почему не приводится к int** ?

PM MAIL   Вверх
apook
Дата 21.4.2007, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 9
Всего: 23



Цитата

 Может запоздало комментирую, но вышеприведенная фраза непонятна...

Ну просто нелепо показалось приведение к указателному характеру
одного единственного элемента массива
Код

int *pa[3] = { (int*)a, a[1], a[2] };

получилось
pa[0]--*a;
pa[1]--a[3];
pa[2]--a[3];
хитро как-то, хотя пускай так будет ладно...

Цитата

И (int*)a[0]  и a[0] и *a и &(a[0][0]) это ОДНО И ТОЖЕ

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

сейчас подумал они все будут указателями, тогда опять же не  понятно это приведение




Это сообщение отредактировал(а) apook - 21.4.2007, 17:12


--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
vinter
Дата 21.4.2007, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



Dov, ты не прав ,ты сам неверно выразился, а теперь еще и посылаешь книжки читать.
Цитата

Имя массива а[][] имеет тип int**

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


--------------------
Мой блог
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.1163 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


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

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