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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 25, средняя оценка - 4.92
SiQeR
11 / 1 / 1
Регистрация: 24.12.2009
Сообщений: 7
#1

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

25.08.2012, 20:51. Просмотров 4062. Ответов 3
Метки нет (Все метки)

Почему когда выделяем динамическую память для одной переменной, то, чтобы записать туда значение, мы используем оператор разыменования (*),
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;
    }
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.08.2012, 20:51
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Оператор разыменования (C++):

Как перегрузить оператор разыменования * - C++
Как перегрузить оператор разыменования?

Оператор разыменования(*) значительно замедляет программу. Почему? - C++
Почему вот такой код string a, b; for (/*долго*/) { if (a &lt; b) { /* сделать что-нибудь */ } }

почему не происходит разыменования нулевого указателя? - C++
вот думаю, почему сия конструкция не вылетает: #define offsetof(type, member) (size_t)(&amp;(((type*)nullptr)-&gt;member))... видимо не происходит...

Порядок выполнения операций разыменования и инкремента - C++
Кто-нибудь может внятно объяснить, почему в этом выражении сначала выполняется разыменование, а потом инкремент, хотя приоритет операций...

Можно ли обойтись без разыменования адресов на элементы - C++
Вот куски кода (полный код тут): // Double Bitset 85 bitset&lt;ULONG_MAX&gt; *first = new bitset&lt;ULONG_MAX&gt;(); 86 bitset&lt;ULONG_MAX&gt;...

Условный оператор, оператор ввода/вывода; плоскость и принадлежность точки - C++
Здравствуйте. В С++ я абсолютный новичок, поэтому с первым же заданием возникли определённые трудности. Будьте добры, помогите решить. Буду...

3
D-Vampire
3 / 3 / 0
Регистрация: 16.05.2012
Сообщений: 36
25.08.2012, 20:57 #2
потому что указатель просто указывает на определенный адрес, в то время как переменная занимает область памяти. Через new мы как раз и выделяем для указателя определенную область, начиная с того адреса, на который указатель указывает (ссори за тафтологию)
1
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
25.08.2012, 21:26 #3
Потому что a[i] где a некий указатель есть ничто иное как *(a + i)
0
alsav22
5428 / 4823 / 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(арифметика указателей).
1
26.08.2012, 03:24
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.08.2012, 03:24
Привет! Вот еще темы с ответами:

Написать программу, содержащую оператор оператор for для счета от 2 до 5 через 1 - C++
В С++ я ноль, помогите пожалуйста написать прогу Написать программу, содержащую оператор оператор for для счета от 2 до 5 через 1 ...

Для шаблонного класса перегрузить оператор присваивания, copy-конструктор, объекты cin и cout, оператор * - C++
Помогите в следующем: Для класса шаблона следует перегрузить оператор присваивания, конструктор копирования, бинарный оператор суммы «*»,...

Для чего нужен оператор двоеточие, если два двоеточия - это оператор расширения области видимости - C++
для чего нужен оператор двоеточие ( : ), если два двоеточия( :: ) - это оператор расширения области видимости.

Почему обращение к методам осуществляется через оператор прямого доступа, а не через оператор указателей->? - C++
#include &lt;iostream&gt; using namespace std; class random { public: void Set(int b){a=b;} int Get(){return a;} private: ...


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

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

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