Форум программистов, компьютерный форум CyberForum.ru

Как из указателя получтлся массив? - C++

Восстановить пароль Регистрация
 
Xristos
2 / 2 / 2
Регистрация: 26.03.2016
Сообщений: 27
03.07.2016, 18:10     Как из указателя получтлся массив? #1
Возможно глупый вопрос,но как unsigned char *e превратился в массив?
C++
1
2
3
4
5
6
7
8
9
10
11
12
int add(CStash* s ,const void* element){
if(s->next >= s->quantity)
inflate(s,increment);
 
int startBytes = s->next * s ->size; 
unsigned char* e =(unsigned char*)element;
for(int i =0;i < s->size;i++)
s->storage[startBytes+i]=e[i];
s->next++;
return(s->next-1);
 
}
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
5955 / 5560 / 1788
Регистрация: 18.12.2011
Сообщений: 14,209
Завершенные тесты: 1
03.07.2016, 18:18     Как из указателя получтлся массив? #2
Ему присвоили адрес массива element.
а e[i] это то же самое, что и *(e+i)
Кстати i[e] - это тоже *(e+i)
Martein
Оператор ЭВМ 6 разряда
 Аватар для Martein
657 / 68 / 12
Регистрация: 22.06.2014
Сообщений: 147
03.07.2016, 18:19     Как из указателя получтлся массив? #3
Следует почитать на тему того, что такое: 1) имя массива 2) указатель на элементы массива 3) арифметика указателей.
Перед поисками сразу проспойлерю, что "e" у вас и не превращалось в массив, оно является указателем на элемент массива, и этот указатель можно использовать для обхода по массиву, используя квадратные скобки.
Xristos
2 / 2 / 2
Регистрация: 26.03.2016
Сообщений: 27
03.07.2016, 18:28  [ТС]     Как из указателя получтлся массив? #4
Цитата Сообщение от zss Посмотреть сообщение
Ему присвоили адрес массива element.
А почему element массив?Он же просто содержит адрес какого-либо элемента(например int).
Renji
1535 / 983 / 240
Регистрация: 05.06.2014
Сообщений: 2,964
03.07.2016, 18:42     Как из указателя получтлся массив? #5
Цитата Сообщение от Xristos Посмотреть сообщение
Возможно глупый вопрос,но как unsigned char *e превратился в массив?
Потому что указатель можно использовать и как указатель на один элемент, и как указатель на массив неизвестной длины. С риском получить граблями по лбу, если это все же был один элемент, а не массив.

Добавлено через 2 минуты
Цитата Сообщение от Xristos Посмотреть сообщение
А почему element массив?
По древнему договору скрепленному кровью дракона.
На самом деле, никаких гарантий что в element именно массив нет, void* может указывать на что угодно, главное, чтоб не константное. Впрочем, при особо наглых преобразованиях можно туда и константное запихать.
Xristos
2 / 2 / 2
Регистрация: 26.03.2016
Сообщений: 27
03.07.2016, 18:53  [ТС]     Как из указателя получтлся массив? #6
Цитата Сообщение от Renji Посмотреть сообщение
Потому что указатель можно использовать и как указатель на один элемент, и как указатель на массив неизвестной длины. С риском получить граблями по лбу, если это все же был один элемент, а не массив.

Добавлено через 2 минуты

По древнему договору скрепленному кровью дракона.
На самом деле, никаких гарантий что в element именно массив нет, void* может указывать на что угодно, главное, чтоб не константное. Впрочем, при особо наглых преобразованиях можно туда и константное запихать.
Т.е если запихать в void* int а потом привести к типу int , то создаётся массив из за того что const char* не способен полностью вместить в себя int(т.к int=4 байт,char=1 байт).Я правильно понял?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.07.2016, 19:02     Как из указателя получтлся массив?
Еще ссылки по теме:

C++ Проверка указателя на массив
C++ Преобразование кода без указателя в код с использованием указателя
Как сделать функцию от указателя на класс и указателя на метод? C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Renji
1535 / 983 / 240
Регистрация: 05.06.2014
Сообщений: 2,964
03.07.2016, 19:02     Как из указателя получтлся массив? #7
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Xristos Посмотреть сообщение
Т.е если запихать в void* int а потом привести к типу int , то создаётся массив из за того что const char* не способен полностью вместить в себя int(т.к int=4 байт,char=1 байт).Я правильно понял?
Не совсем так. "Массив" в данном случае - последовательность элементов расположенных в памяти строго друг за другом. Так как int является последовательностью из четырех байт, его можно использовать как массив из четырех char. Но, разумеется, при преобразовании int* к char* ничего, нигде не создается. Вы просто по-другому трактуете кусок памяти на который указывает указатель. На том же построено и использование указателя на один элемент как указателя на массив. Какие-то данные следом за элементом есть. вот они за содержимое "массива" и считаются.
Yandex
Объявления
03.07.2016, 19:02     Как из указателя получтлся массив?
Ответ Создать тему

Метки
массив
Опции темы

Текущее время: 23:04. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru