Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
BESSON_off
3 / 0 / 0
Регистрация: 08.07.2013
Сообщений: 351
#1

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

29.08.2013, 19:03. Просмотров 896. Ответов 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;
}
И меня очень заинтересовало - почему создавая массив в области динамической памяти я могу, используя индекс, управлять объектами в этом массиве без использования разименования? Ведь указатель на массив в динамической памяти - это константный указатель на адресс первого объекта этого массива... разве нет?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.08.2013, 19:03
Ответы с готовыми решениями:

Как узнать размер массива в динамической памяти?
Добрый вечер еще раз! Напишите пожалуйста как можно узнать истинный размер...

Выделение динамической памяти для массива точек
Доброго времени суток. Вот у нас есть структура точка struct point...

Выделение динамической памяти для двумерного массива.
#include &lt;iostream&gt; int main() { setlocale( LC_ALL,&quot;Russian&quot; ); int...

Правильное выдиление динамической памяти для двумерного массива
#include'iostream.h' #include'stdio.h' #include'string.h' void main() { ...

Как обратиться к значениям двухмерного массива созданного с выделением динамической памяти?
Здравствуйте. Есть такой код (не полностью) #include &lt;iostream&gt; #include...

7
Croessmah
++Ͻ
14503 / 8285 / 1556
Регистрация: 27.09.2012
Сообщений: 20,338
Записей в блоге: 3
Завершенные тесты: 1
29.08.2013, 19:13 #2
Цитата Сообщение от BESSON_off Посмотреть сообщение
без использования разименования?
C++
1
mas[i]
рассматривайте как
C++
1
* ( mas + i )
0
BESSON_off
3 / 0 / 0
Регистрация: 08.07.2013
Сообщений: 351
29.08.2013, 21:10  [ТС] #3
Так прописан оператор []?
0
kvadro
12 / 10 / 1
Регистрация: 12.03.2012
Сообщений: 127
29.08.2013, 21:16 #4
mas - адрес первого элемента, тоже самое что &mas[0]. В свою очередь &mas это "контекст" всего массива.

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

В свою очередь mas + 1 - переместит указатель на sizeof( int ).
0
Nameless One
Эксперт С++
5785 / 3434 / 351
Регистрация: 08.02.2010
Сообщений: 7,448
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 Посмотреть сообщение
Ведь указатель на массив в динамической памяти - это константный указатель на адресс первого объекта этого массива... разве нет?
Во-первых, у тебя не указатель на массив, а просто указатель. Во-вторых, не константный. В-третьих, статический массив — это тоже (не константный) указатель на первый объект массива.
0
BESSON_off
3 / 0 / 0
Регистрация: 08.07.2013
Сообщений: 351
31.08.2013, 18:24  [ТС] #6
Цитата Сообщение от Nameless One Посмотреть сообщение
cout << 2[arr] << endl;
Такого я еще не видел - пойду попробую
0
castaway
Эксперт С++
4929 / 3036 / 453
Регистрация: 10.11.2010
Сообщений: 11,116
Записей в блоге: 10
Завершенные тесты: 1
31.08.2013, 18:31 #7
Цитата Сообщение от BESSON_off Посмотреть сообщение
Ведь указатель на массив в динамической памяти - это константный указатель на адресс первого объекта этого массива... разве нет?
Нет. С какой стати он константный?
Оператор [] - это тоже оператор разыменования.
0
Croessmah
++Ͻ
14503 / 8285 / 1556
Регистрация: 27.09.2012
Сообщений: 20,338
Записей в блоге: 3
Завершенные тесты: 1
31.08.2013, 23:49 #8
Цитата Сообщение от BESSON_off Посмотреть сообщение
Такого я еще не видел - пойду попробую
От перестановки слагаемых сумма не меняется
0
31.08.2013, 23:49
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.08.2013, 23:49

Массив в динамической памяти
Помогите написать прогу в динамической памяти #include&lt;iostream.h&gt;...

Перераспределение динамической памяти
дан двумерный массив 3х5 выделить динамически память под него, затем...

Теория по динамической памяти
Предположим, применяется оператор new в форме для массива: p=new int ;. n ведь...


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

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

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