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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Xristos
2 / 2 / 2
Регистрация: 26.03.2016
Сообщений: 28
#1

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

03.07.2016, 18:10. Просмотров 181. Ответов 6

Возможно глупый вопрос,но как 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)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.07.2016, 18:10     Как из указателя получтлся массив?
Посмотрите здесь:

C++ Обнулить массив с помощью указателя
Возврат указателя на массив из функции C++
C++ Запись указателя на строку в массив
C++ Разобрать пример указателя на символьный массив
вывод указателя на массив на массив C++
Как из указателя на массив достать конкретное значение массива C++
Возврат указателя на массив указателей C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
6111 / 5714 / 1849
Регистрация: 18.12.2011
Сообщений: 14,593
Завершенные тесты: 1
03.07.2016, 18:18     Как из указателя получтлся массив? #2
Ему присвоили адрес массива element.
а e[i] это то же самое, что и *(e+i)
Кстати i[e] - это тоже *(e+i)
Martein
Оператор ЭВМ 6 разряда
 Аватар для Martein
666 / 77 / 13
Регистрация: 22.06.2014
Сообщений: 163
03.07.2016, 18:19     Как из указателя получтлся массив? #3
Следует почитать на тему того, что такое: 1) имя массива 2) указатель на элементы массива 3) арифметика указателей.
Перед поисками сразу проспойлерю, что "e" у вас и не превращалось в массив, оно является указателем на элемент массива, и этот указатель можно использовать для обхода по массиву, используя квадратные скобки.
Xristos
2 / 2 / 2
Регистрация: 26.03.2016
Сообщений: 28
03.07.2016, 18:28  [ТС]     Как из указателя получтлся массив? #4
Цитата Сообщение от zss Посмотреть сообщение
Ему присвоили адрес массива element.
А почему element массив?Он же просто содержит адрес какого-либо элемента(например int).
Renji
1698 / 1131 / 270
Регистрация: 05.06.2014
Сообщений: 3,284
03.07.2016, 18:42     Как из указателя получтлся массив? #5
Цитата Сообщение от Xristos Посмотреть сообщение
Возможно глупый вопрос,но как unsigned char *e превратился в массив?
Потому что указатель можно использовать и как указатель на один элемент, и как указатель на массив неизвестной длины. С риском получить граблями по лбу, если это все же был один элемент, а не массив.

Добавлено через 2 минуты
Цитата Сообщение от Xristos Посмотреть сообщение
А почему element массив?
По древнему договору скрепленному кровью дракона.
На самом деле, никаких гарантий что в element именно массив нет, void* может указывать на что угодно, главное, чтоб не константное. Впрочем, при особо наглых преобразованиях можно туда и константное запихать.
Xristos
2 / 2 / 2
Регистрация: 26.03.2016
Сообщений: 28
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++ Разадресация указателя в массив из указателей
C++ Неправильная разадресация указателя на массив в цикле
Возврат указателя на массив из функции C++

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

Или воспользуйтесь поиском по форуму:
Renji
1698 / 1131 / 270
Регистрация: 05.06.2014
Сообщений: 3,284
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     Как из указателя получтлся массив?
Ответ Создать тему
Опции темы

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