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

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

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

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

29.08.2013, 19:03. Просмотров 713. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Индексация массива в динамической памяти (C++):

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

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

Выделение динамической памяти для массива точек - C++
Доброго времени суток. Вот у нас есть структура точка struct point { double x,y; } p;

Правильное выдиление динамической памяти для двумерного массива - C++
#include'iostream.h' #include'stdio.h' #include'string.h' void main() { char **text; int i,j,k,nm; char s; ...

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

Выделение динамической памяти - C++
Добрый вечер. Помогите разобраться пожалуйста! Суть такова: есть файл, в нем есть данные, мне надо их оттуда считать и вывести на...

7
Croessmah
Эксперт CЭксперт С++
13415 / 7566 / 855
Регистрация: 27.09.2012
Сообщений: 18,620
Записей в блоге: 3
Завершенные тесты: 1
29.08.2013, 19:13 #2
Цитата Сообщение от BESSON_off Посмотреть сообщение
без использования разименования?
C++
1
mas[i]
рассматривайте как
C++
1
* ( mas + i )
0
BESSON_off
3 / 0 / 1
Регистрация: 08.07.2013
Сообщений: 348
29.08.2013, 21:10  [ТС] #3
Так прописан оператор []?
0
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 ).
0
Nameless One
Эксперт С++
5774 / 3424 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
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 / 1
Регистрация: 08.07.2013
Сообщений: 348
31.08.2013, 18:24  [ТС] #6
Цитата Сообщение от Nameless One Посмотреть сообщение
cout << 2[arr] << endl;
Такого я еще не видел - пойду попробую
0
castaway
Эксперт С++
4884 / 3019 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
31.08.2013, 18:31 #7
Цитата Сообщение от BESSON_off Посмотреть сообщение
Ведь указатель на массив в динамической памяти - это константный указатель на адресс первого объекта этого массива... разве нет?
Нет. С какой стати он константный?
Оператор [] - это тоже оператор разыменования.
0
Croessmah
Эксперт CЭксперт С++
13415 / 7566 / 855
Регистрация: 27.09.2012
Сообщений: 18,620
Записей в блоге: 3
Завершенные тесты: 1
31.08.2013, 23:49 #8
Цитата Сообщение от BESSON_off Посмотреть сообщение
Такого я еще не видел - пойду попробую
От перестановки слагаемых сумма не меняется
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.08.2013, 23:49
Привет! Вот еще темы с ответами:

Переменная в динамической памяти - C++
class SimpleCircle { public: SimpleCircle (); //Basic constructor SimpleCircle (int radius); //Constructor with parameters ...

Вопросы по динамической памяти. - C++
У меня вопросы по работе с динамической памятью. Пожалуйста, помогите разобраться с этой темой. - чем отличается free() от delete? и...

Матрица в динамической памяти - C++
Здраствуйте,начал проходить динамическую память ,так немогу зделать 2-х мерный массив,помогите пожалуисто разобраться ,ии какие ошибки тут...

Удаление new из динамической памяти - C++
Здравствуйте, у меня есть следующее присвоение: sign-&gt;numb = new int; Мне нужно от него избавиться в конце программы, но delete...


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

Или воспользуйтесь поиском по форуму:
8
Yandex
Объявления
31.08.2013, 23:49
Ответ Создать тему
Опции темы

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