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

Индексация массива в динамической памяти - C++

Восстановить пароль Регистрация
 
BESSON_off
 Аватар для BESSON_off
3 / 0 / 1
Регистрация: 08.07.2013
Сообщений: 329
29.08.2013, 19:03     Индексация массива в динамической памяти #1
Всем привет!

Вроде очень простой вопрос, но я не смог найти на него ответа. Вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
using namespace std;
 
int main()
{
int * mas = new int[500];
for (int i=0;i<500;i++)
    mas[i] = i*2+1;
for (int i=0;i<500;i++)
    cout << mas[i] << endl;
cout << endl;
return 0;
}
И меня очень заинтересовало - почему создавая массив в области динамической памяти я могу, используя индекс, управлять объектами в этом массиве без использования разименования? Ведь указатель на массив в динамической памяти - это константный указатель на адресс первого объекта этого массива... разве нет?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
29.08.2013, 19:13     Индексация массива в динамической памяти #2
Цитата Сообщение от BESSON_off Посмотреть сообщение
без использования разименования?
C++
1
mas[i]
рассматривайте как
C++
1
* ( mas + i )
BESSON_off
 Аватар для BESSON_off
3 / 0 / 1
Регистрация: 08.07.2013
Сообщений: 329
29.08.2013, 21:10  [ТС]     Индексация массива в динамической памяти #3
Так прописан оператор []?
kvadro
11 / 9 / 1
Регистрация: 12.03.2012
Сообщений: 127
29.08.2013, 21:16     Индексация массива в динамической памяти #4
mas - адрес первого элемента, тоже самое что &mas[0]. В свою очередь &mas это "контекст" всего массива.

Как было сказано выше:
mas[i] == * ( mas + i )

В свою очередь mas + 1 - переместит указатель на sizeof( int ).
Nameless One
Эксперт С++
 Аватар для Nameless One
5755 / 3404 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
30.08.2013, 07:56     Индексация массива в динамической памяти #5
Цитата Сообщение от BESSON_off Посмотреть сообщение
Так прописан оператор []?
Угу, можешь считать, что так. Именно поэтому будет работать такой, к примеру, код:

C++
1
2
3
4
5
6
7
8
#include <iostream>
 
int main()
{
    using namespace std;
    int arr[] = { 1, 2, 3 };
    cout << 2[arr] << endl;
}
Добавлено через 5 минут
Цитата Сообщение от BESSON_off Посмотреть сообщение
И меня очень заинтересовало - почему создавая массив в области динамической памяти я могу, используя индекс, управлять объектами в этом массиве без использования разименования?
А почему ты вообще решил, что с динамическими массивами тебе обязательно нужно использовать разыменование, и чем в этом вопросе динамические массивы отличаются от статических?

Цитата Сообщение от BESSON_off Посмотреть сообщение
Ведь указатель на массив в динамической памяти - это константный указатель на адресс первого объекта этого массива... разве нет?
Во-первых, у тебя не указатель на массив, а просто указатель. Во-вторых, не константный. В-третьих, статический массив — это тоже (не константный) указатель на первый объект массива.
BESSON_off
 Аватар для BESSON_off
3 / 0 / 1
Регистрация: 08.07.2013
Сообщений: 329
31.08.2013, 18:24  [ТС]     Индексация массива в динамической памяти #6
Цитата Сообщение от Nameless One Посмотреть сообщение
cout << 2[arr] << endl;
Такого я еще не видел - пойду попробую
castaway
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 10
Завершенные тесты: 1
31.08.2013, 18:31     Индексация массива в динамической памяти #7
Цитата Сообщение от BESSON_off Посмотреть сообщение
Ведь указатель на массив в динамической памяти - это константный указатель на адресс первого объекта этого массива... разве нет?
Нет. С какой стати он константный?
Оператор [] - это тоже оператор разыменования.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.08.2013, 23:49     Индексация массива в динамической памяти
Еще ссылки по теме:

Выделение динамической памяти C++
C++ Как узнать размер массива в динамической памяти?
C++ Выделение динамической памяти для массива точек

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

Или воспользуйтесь поиском по форуму:
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
31.08.2013, 23:49     Индексация массива в динамической памяти #8
Цитата Сообщение от BESSON_off Посмотреть сообщение
Такого я еще не видел - пойду попробую
От перестановки слагаемых сумма не меняется
Yandex
Объявления
31.08.2013, 23:49     Индексация массива в динамической памяти
Ответ Создать тему
Опции темы

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