Re[5]: Инициализация указателя на массив
От: DarthVader Украина  
Дата: 20.10.08 17:42
Оценка:
Здравствуйте, Lorenzo_LAMAS, Вы писали:

LVV>>Именно поэтому можно писать присваивание для массива без всяких операций взятия адреса.

LVV>>А также при передаче параметра в функцию имя массива на месте параметра-указателя пишется без всяких амперсандов.

L_L>Потому, что если Вы напишете с & -то получите адрес массива, т.е. rvalue типа int (*)[размер]


LVV>>Еще у Кернигана и Ричи написано.


L_L>Страницу, абзац, строку оригинала. А еще проще, раз уж так на С потянуло, стандарт C99 поглядеть



Тема старая конечно, но попробую задать вопрос здесь.

есть указатель на массив int (*a)[1]

нужно записать к нему new, не прибегая к помощи typedef
/*
typedef int IntArray[5]; //так работает
IntArray *arr = new IntArray[1];
*/

а как записать, чтобы работало так: int (*a)[1] = new .......?
И грязные дела дают чистую прибыль.
Re[6]: Инициализация указателя на массив
От: LaptevVV Россия  
Дата: 21.10.08 11:02
Оценка: -1
Здравствуйте, DarthVader, Вы писали:


DV>Тема старая конечно, но попробую задать вопрос здесь.

DV>есть указатель на массив int (*a)[1]
DV>нужно записать к нему new, не прибегая к помощи typedef
DV>/*
DV>typedef int IntArray[5]; //так работает
DV>IntArray *arr = new IntArray[1];
DV>*/

DV>а как записать, чтобы работало так: int (*a)[1] = new .......?

С преобразованием типа
int (*pp)[1] = (int (*)[1]) new int[1];
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[7]: Инициализация указателя на массив
От: LaptevVV Россия  
Дата: 22.10.08 06:18
Оценка:
Здравствуйте, LaptevVV, Вы писали:

DV>>а как записать, чтобы работало так: int (*a)[1] = new .......?

LVV>С преобразованием типа
LVV>
LVV>int (*pp)[1] = (int (*)[1]) new int[1];
LVV>

Не согласен — предлагай!
Напишите, как правильно, пожалуйста.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[8]: Инициализация указателя на массив
От: DarthVader Украина  
Дата: 22.10.08 08:18
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>Здравствуйте, LaptevVV, Вы писали:


DV>>>а как записать, чтобы работало так: int (*a)[1] = new .......?

LVV>>С преобразованием типа
LVV>>
LVV>>int (*pp)[1] = (int (*)[1]) new int[1];
LVV>>

LVV>Не согласен — предлагай!
LVV>Напишите, как правильно, пожалуйста.


Уже разобрался, спасибо.

Кроме того, тут на форуме прямо оказалась рядом темка, что называется "в тему" =)
http://www.rsdn.ru/Forum/message/2544612.flat.aspx
Автор:
Дата: 13.06.07
И грязные дела дают чистую прибыль.
Re[8]: Инициализация указателя на массив
От: Erop Россия  
Дата: 22.10.08 08:43
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>Не согласен — предлагай!

если не понятно, то я не согласен, что массив из одного int можно безнаказанно приводить к указателю на что бы то ни было. Указатель легко может оказаться больше, чем int...

Если уж тебе охота хаккерить именно так, то надо действовать в следующем духе:
reinterpret_cast<XXX_type>( new char[sizeof(XXX_type)])
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[9]: Инициализация указателя на массив
От: LaptevVV Россия  
Дата: 22.10.08 10:13
Оценка:
Здравствуйте, Erop, Вы писали:

LVV>>Не согласен — предлагай!

E>если не понятно, то я не согласен, что массив из одного int можно безнаказанно приводить к указателю на что бы то ни было. Указатель легко может оказаться больше, чем int...
Эт понятно. Дело не в хакерстве. А втом, что до меня не дошло, как правильно.
Наверное, вот так:
int (*p)[1] = new int [1][1];

Указатель на массив, элементом которого является массив из одного элемента.
Ы?
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[14]: Инициализация указателя на массив
От: _wqwa США  
Дата: 22.10.08 13:18
Оценка:
Здравствуйте, LaptevVV, Вы писали:


LVV>Сидеть дома и писать докторскую , обсуждать с аспирантами их диссеры — и чтоб в институте про меня ЗАБЫЛИ!!!!

LVV>

С аспирантками веселее, небось!
Кто здесь?!
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.