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

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

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

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

03.07.2016, 18:10. Просмотров 217. Ответов 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);
 
}
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.07.2016, 18:10
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как из указателя получтлся массив? (C++):

Как сделать функцию от указателя на класс и указателя на метод? - C++
Не получается сделать функцию, параметрами которой являются указатель на класс и на метод. Обращаться к классу нужно именно по указателю,...

Как из указателя на массив достать конкретное значение массива - C++
Добрый день. Недавно написал программу проверки предложения на панграмму. Панграмма — текст, использующий все или почти все буквы алфавита....

Преобразование указателя в массив - C++
Всем привет. Есть указатель с типом const u_char * , известно , что он указывает на N байт. Как преобразовать его в массив; Пробовал...

Проверка указателя на массив - C++
Как нам проверить, что указатель указывает на пямять, выделенную в куче, а не на стеке? например такой код для простоты. Так как в таком...

вывод указателя на массив на массив - C++
#include &lt;iostream&gt; using namespace std; void main() { char i={{'g'},{'d'},{'r'},{'a'},{'f'}}; for (int k=0; k&lt;5;...

Почему увеличение указателя на sizeof(тип) не тождественно инкременту этого же указателя? - C++
Всем доброго дня.:) Можете обьяснить ,почему при инкриментировании указателя,его значение(адресс) увеличивается на 4 (размер int в...

6
zss
Модератор
Эксперт С++
6484 / 6047 / 1985
Регистрация: 18.12.2011
Сообщений: 15,683
Завершенные тесты: 1
03.07.2016, 18:18 #2
Ему присвоили адрес массива element.
а e[i] это то же самое, что и *(e+i)
Кстати i[e] - это тоже *(e+i)
1
Martein
Оператор ЭВМ 6 разряда
674 / 85 / 13
Регистрация: 22.06.2014
Сообщений: 177
03.07.2016, 18:19 #3
Следует почитать на тему того, что такое: 1) имя массива 2) указатель на элементы массива 3) арифметика указателей.
Перед поисками сразу проспойлерю, что "e" у вас и не превращалось в массив, оно является указателем на элемент массива, и этот указатель можно использовать для обхода по массиву, используя квадратные скобки.
1
Xristos
2 / 2 / 2
Регистрация: 26.03.2016
Сообщений: 28
03.07.2016, 18:28  [ТС] #4
Цитата Сообщение от zss Посмотреть сообщение
Ему присвоили адрес массива element.
А почему element массив?Он же просто содержит адрес какого-либо элемента(например int).
0
Renji
1927 / 1325 / 299
Регистрация: 05.06.2014
Сообщений: 3,828
03.07.2016, 18:42 #5
Цитата Сообщение от Xristos Посмотреть сообщение
Возможно глупый вопрос,но как unsigned char *e превратился в массив?
Потому что указатель можно использовать и как указатель на один элемент, и как указатель на массив неизвестной длины. С риском получить граблями по лбу, если это все же был один элемент, а не массив.

Добавлено через 2 минуты
Цитата Сообщение от Xristos Посмотреть сообщение
А почему element массив?
По древнему договору скрепленному кровью дракона.
На самом деле, никаких гарантий что в element именно массив нет, void* может указывать на что угодно, главное, чтоб не константное. Впрочем, при особо наглых преобразованиях можно туда и константное запихать.
2
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 байт).Я правильно понял?
0
Renji
1927 / 1325 / 299
Регистрация: 05.06.2014
Сообщений: 3,828
03.07.2016, 19:02 #7
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Xristos Посмотреть сообщение
Т.е если запихать в void* int а потом привести к типу int , то создаётся массив из за того что const char* не способен полностью вместить в себя int(т.к int=4 байт,char=1 байт).Я правильно понял?
Не совсем так. "Массив" в данном случае - последовательность элементов расположенных в памяти строго друг за другом. Так как int является последовательностью из четырех байт, его можно использовать как массив из четырех char. Но, разумеется, при преобразовании int* к char* ничего, нигде не создается. Вы просто по-другому трактуете кусок памяти на который указывает указатель. На том же построено и использование указателя на один элемент как указателя на массив. Какие-то данные следом за элементом есть. вот они за содержимое "массива" и считаются.
0
03.07.2016, 19:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.07.2016, 19:02
Привет! Вот еще темы с ответами:

Преобразование кода без указателя в код с использованием указателя - C++
Правильно ли выполнил? Исходный код без указателя #include &lt;iostream&gt; #include &lt;cstdlib&gt; #include &lt;fstream&gt; using namespace...

Возвращения указателя на массив из функции - C++
Как возвратитьуказатель на массив из функции в другую функцию и потом воспользоаваться этим массивом? #include &quot;stdafx.h&quot; ...

Обнулить массив с помощью указателя - C++
1.как обнулить массив с помощью указателя?? 2.как передать в функцию одномерный и двумерные массивы???

Возврат указателя на массив из функции - C++
Здравствуйте. Пытаюсь вернуть указатель на массив из функции. #include &lt;iostream&gt; using namespace std; int*...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

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