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

Оператор разыменования - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 25, средняя оценка - 4.92
SiQeR
11 / 1 / 1
Регистрация: 24.12.2009
Сообщений: 7
25.08.2012, 20:51     Оператор разыменования #1
Почему когда выделяем динамическую память для одной переменной, то, чтобы записать туда значение, мы используем оператор разыменования (*),
C++
1
2
int *a = new int;
*a = 5;
а когда выделяем для массива переменных, то оператор разыменования не используется?
C++
1
2
3
4
5
int *a = new int [5];
    for (int i = 0;i<5;i++)
    {
        a[i] = i;
    }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.08.2012, 20:51     Оператор разыменования
Посмотрите здесь:

C++ Написать программу, содержащую оператор оператор for для счета от 2 до 5 через 1
Условный оператор, оператор ввода/вывода; плоскость и принадлежность точки C++
Применяя оператор цикла FOR вычислить y. Оператор if в теле цикла не использовать. Значение m и n вводить с клавиатуры. C++
C++ Оператор break как оператор go to next
C++ Как перегрузить оператор разыменования *
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
D-Vampire
3 / 3 / 0
Регистрация: 16.05.2012
Сообщений: 36
25.08.2012, 20:57     Оператор разыменования #2
потому что указатель просто указывает на определенный адрес, в то время как переменная занимает область памяти. Через new мы как раз и выделяем для указателя определенную область, начиная с того адреса, на который указатель указывает (ссори за тафтологию)
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
25.08.2012, 21:26     Оператор разыменования #3
Потому что a[i] где a некий указатель есть ничто иное как *(a + i)
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
26.08.2012, 03:24     Оператор разыменования #4
Цитата Сообщение от ForEveR Посмотреть сообщение
Потому что a[i] где a некий указатель есть ничто иное как *(a + i)
Продолжу для ясности. Поэтому вот это:
C++
1
2
int *a = new int;
*a = 5;
можно и так написать:
C++
1
2
int *a = new int;
a[0] = 5;
Или вот такое:
C++
1
2
int a;
(&a)[0] = 5;
равно такому:
C++
1
2
int a;
a = 5;
То есть, если adr некий адрес, то adr[i] - это содержимое по адресу adr + i, где i - смещение относительно adr(арифметика указателей).
Yandex
Объявления
26.08.2012, 03:24     Оператор разыменования
Ответ Создать тему
Опции темы

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