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

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

Войти
Регистрация
Восстановить пароль
 
BESSON_off
3 / 0 / 1
Регистрация: 08.07.2013
Сообщений: 342
#1

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

29.08.2013, 19:03. Просмотров 663. Ответов 7
Метки нет (Все метки)

Всем привет!

Вроде очень простой вопрос, но я не смог найти на него ответа. Вот код:
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;
}
И меня очень заинтересовало - почему создавая массив в области динамической памяти я могу, используя индекс, управлять объектами в этом массиве без использования разименования? Ведь указатель на массив в динамической памяти - это константный указатель на адресс первого объекта этого массива... разве нет?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.08.2013, 19:03     Индексация массива в динамической памяти
Посмотрите здесь:
Выделение динамической памяти для двумерного массива. C++
C++ Как узнать размер массива в динамической памяти?
C++ Выделение динамической памяти для массива точек
C++ Правильное выдиление динамической памяти для двумерного массива
Как обратиться к значениям двухмерного массива созданного с выделением динамической памяти? C++
C++ Освобождение динамической памяти в vs
Удаление new из динамической памяти C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт CЭксперт С++
12980 / 7292 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
29.08.2013, 19:13     Индексация массива в динамической памяти #2
Цитата Сообщение от BESSON_off Посмотреть сообщение
без использования разименования?
C++
1
mas[i]
рассматривайте как
C++
1
* ( mas + i )
BESSON_off
3 / 0 / 1
Регистрация: 08.07.2013
Сообщений: 342
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
Эксперт С++
5769 / 3418 / 255
Регистрация: 08.02.2010
Сообщений: 7,444
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
3 / 0 / 1
Регистрация: 08.07.2013
Сообщений: 342
31.08.2013, 18:24  [ТС]     Индексация массива в динамической памяти #6
Цитата Сообщение от Nameless One Посмотреть сообщение
cout << 2[arr] << endl;
Такого я еще не видел - пойду попробую
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 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++
Выделение динамической памяти C++
Вопросы по динамической памяти. C++

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

Или воспользуйтесь поиском по форуму:
Croessmah
Модератор
Эксперт CЭксперт С++
12980 / 7292 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
31.08.2013, 23:49     Индексация массива в динамической памяти #8
Цитата Сообщение от BESSON_off Посмотреть сообщение
Такого я еще не видел - пойду попробую
От перестановки слагаемых сумма не меняется
Yandex
Объявления
31.08.2013, 23:49     Индексация массива в динамической памяти
Ответ Создать тему
Опции темы

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