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

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

Войти
Регистрация
Восстановить пароль
 
IvanInanovich
0 / 0 / 0
Регистрация: 03.01.2013
Сообщений: 113
#1

"Увеличить указатель" - C++

18.04.2013, 16:34. Просмотров 375. Ответов 4
Метки нет (Все метки)

Добрый день. В книге Р. Лафоре ООП, написано что мы не можем увеличить адрес массива т.к. адрес является константой, но можем "увеличить указатель". Вот примерный код (в книге пример с циклом):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
using namespace std;
 
int main()
{
 
int arr[5] = {4,5,6,7,8};
int* temp;
 
temp = arr;
cout << temp++ << endl;
cout << temp++ << endl;
 
cout << temp << endl;
cout << temp++;
    
    
    return 0;
}
Немного не понятна суть. Мы увеличиваем таким образом сам адрес указателя? Переходим просто в новый элемент? К примеру если массив int как в данной программе, то указатель будет содержать в себе адрес на массив arr+(переход на новый элемент) т.е. 4 байта ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.04.2013, 16:34
Я подобрал для вас темы с готовыми решениями и ответами на вопрос "Увеличить указатель" (C++):

Где ошибка невозможно преобразовать указатель "this" из "const pers" в "pers &" при выводе объектов через cout - C++
Добрый день! Переписал код из книг Лафоре, создание мультимножества из собственных объектов- справочник телефонный, с именем и фамилией. ...

В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно" - C++
В зависимости от времени года &quot;весна&quot;, &quot;лето&quot;, &quot;осень&quot;, &quot;зима&quot; определить погоду &quot;тепло&quot;, &quot;жарко&quot;, &quot;холодно&quot;, &quot;очень холодно&quot;. Я так...

Как передать параметр типа "указатель на указатель" в функцию? - C++
#include &quot;stdafx.h&quot; #include &lt;conio.h&gt; #include &lt;iostream&gt; using namespace std; #include &lt;iomanip&gt; using std::setiosflags; ...

Реализовать классы "Воин", "Пехотинец", "Винтовка", "Матрос", "Кортик" (наследование) - C++
Разработать программу с использованием наследования классов, реализующую классы: − воин; − пехотинец(винтовка); − матрос(кортик). ...

Создать класс "Книга" с полями "название книги", "количество страниц", "год издания" - C++
Создать класс Книга поля: название книги,количество страниц,год издания методы: вычислить сколько лет книге и количество дней прошедших...

Создать абстрактный класс "Издание" и производные классы "Книга", "Статья", "Электронный ресурс" - C++
1. Создать абстрактный класс Издание с методами, позволяющими вывести на экран информацию об издании, а также определить является ли данное...

4
Tulosba
:)
Эксперт С++
4705 / 3240 / 297
Регистрация: 19.02.2013
Сообщений: 9,046
18.04.2013, 16:37 #2
Цитата Сообщение от IvanInanovich Посмотреть сообщение
то указатель будет содержать в себе адрес на массив arr+(переход на новый элемент) т.е. 4 байта
Да. Только лучше не делать акцент на кол-ве байтов, просто сказать, что смещение будет на sizeof(int).
Точнее не адрес на массив, а адрес на эл-т массива.
1
IvanInanovich
0 / 0 / 0
Регистрация: 03.01.2013
Сообщений: 113
18.04.2013, 16:40  [ТС] #3
Цитата Сообщение от Tulosba Посмотреть сообщение
Да. Только лучше не делать акцент на кол-ве байтов, просто сказать, что смещение будет на sizeof(int).
Точнее не адрес на массив, а адрес на эл-т массива.
Благодарю)
0
ArmanPrestige
Pied Piper
232 / 223 / 51
Регистрация: 15.01.2013
Сообщений: 855
Завершенные тесты: 1
18.04.2013, 16:41 #4
Чтобы легче понять, представь себе память как числовую ось. Если ты применяешь к указателю инкремент, то он "сдвигает" этот указатель на sizeof того типа, на который он указывает. Так как sizeof(int) это 4 байта, то ты сдвигаешься на 4 байта. Ты можешь применять инкремент т.к. ты знаешь, что хранится по-этому адресу, и по этой же причине ты можешь разименовать указатель. С указателем типа void такое не пройдет.
1
IvanInanovich
0 / 0 / 0
Регистрация: 03.01.2013
Сообщений: 113
18.04.2013, 16:50  [ТС] #5
Цитата Сообщение от ArmanPrestige Посмотреть сообщение
Чтобы легче понять, представь себе память как числовую ось. Если ты применяешь к указателю инкремент, то он "сдвигает" этот указатель на sizeof того типа, на который он указывает. Так как sizeof(int) это 4 байта, то ты сдвигаешься на 4 байта. Ты можешь применять инкремент т.к. ты знаешь, что хранится по-этому адресу, и по этой же причине ты можешь разименовать указатель. С указателем типа void такое не пройдет.
Спасибо. Вроде все понимаю, но немного в ступор вводит. )
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.04.2013, 16:50
Привет! Вот еще темы с ответами:

Создать класс "Вентилятор" содержащий в себе классы: "Двигатель", "Контроллер", "Пульт управления" - C++
Помогите с кодом написания задачи, не понимаю как написать классы в классе. Нужно создать класс &quot;вентилятор&quot; содержащий в себе классы:...

Определить тип данных "Запись", имеющий поля "Фамилия", "Пол", "Зарплата" - C++
определить тип данных запись имеющий поля фамилия пол зарплата. определить массив из 10 записей. в программе ввести в массив данные и...

Создать иерархию классов "Фирма", "Бухгалтер", "Сотрудник", "Зарплата" - C++
Само по себе понятие &quot;зарплата&quot; не особенно конкретное: оно включает и почасовую, и ставочную зарплату, и комиссионные, и процент с продаж....

Структура «Преподаватель» с полями "ФИО", "стаж", "категория", "нагрузка" - C++
Функция - расчёт зарплаты по нагрузке и оплате часа для определенной категории. Категория Оплата часа Вторая 150 Первая 200 ...


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

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

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