Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 03.09.2018
Сообщений: 48

Арифметика указателей

23.09.2019, 19:34. Показов 2071. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C++
1
2
3
short tell [10];
cout<<tell+1;
cout<<&tell+1;
1) Когда может понадобиться добавление единицы к адресу ? Автор пишет про эту возможность ,но зачем это непонятно.
Миниатюры
Арифметика указателей  
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.09.2019, 19:34
Ответы с готовыми решениями:

арифметика указателей
Здравствуйте. Объясните, пожалуйста, код из инета: 1. &quot;переменная A типа int приводится к типу unsigned&quot; приводится к...

Арифметика указателей
Не могу понять, почему значения указателей не совпадают. #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; int main() { ...

Арифметика указателей
Эквивалентны ли эти две записи? int *p1=new int; int *p2=p1; или int *p1=new int;

7
19497 / 10102 / 2461
Регистрация: 30.01.2014
Сообщений: 17,808
23.09.2019, 21:27
Цитата Сообщение от Razor0109 Посмотреть сообщение
Автор пишет про эту возможность ,но зачем это непонятно.
Он это пишет, чтобы объяснить адресную арифметику.
Чтобы показать, что при добавлении N (в его случае N=1) к адресу типа T, на самом деле адрес изменится на N * sizeof(T).

Цитата Сообщение от Razor0109 Посмотреть сообщение
Когда может понадобиться добавление единицы к адресу ?
В данном случае, чтобы получить адрес второго элемента массива.
1
0 / 0 / 0
Регистрация: 03.09.2018
Сообщений: 48
25.09.2019, 21:31  [ТС]
а вот &tell+1 возможно разыменовать ?
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
25.09.2019, 21:33
Цитата Сообщение от Razor0109 Посмотреть сообщение
а вот &tell+1 возможно разыменовать ?
Разыменовывать возможно все, что угодно (не всегда напрямую, правда).
0
0 / 0 / 0
Регистрация: 03.09.2018
Сообщений: 48
25.09.2019, 21:54  [ТС]
ну вот у меня пока только так получилось.
int *pas;
pas=&tell[0]+1;
cout<<*pas;
0
19497 / 10102 / 2461
Регистрация: 30.01.2014
Сообщений: 17,808
26.09.2019, 00:06
Лучший ответ Сообщение было отмечено Razor0109 как решение

Решение

Цитата Сообщение от Razor0109 Посмотреть сообщение
а вот &tell+1 возможно разыменовать ?
Ну вот подумайте сами. Исходя из того, что я выше сказал.
Какой тип имеет &tell? У вас в книге написано это (правда с ошибкой\опечаткой, я но вы наверное это заметили, раз не спросили). В общем, правильно - тип short (*)[10]. Т.е. это указатель на массив из 10 элементов типа short, т.е. short[10]. Какой sizeof у массива? Правильно sizeof(short[10]), т.е. в данном случае - 20. Добавляя к указателю на тип T (в данном случае T = short[10]) единицу, мы получаем, согласно приведенной выше формуле, смещение адреса на 1 * sizeof(T), т.е. 1 * sizeof(short[10]), т.е. значение адреса изменится на 20, а что у нас по этом адресу находится? Правильно, ничего (то бишь это адрес за концом массива).
Ну что, можем мы разыменовывать указатель, который указывает на "ничего", как вы считаете?
1
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
26.09.2019, 07:55
Razor0109, единица добавленная к адресу указывающему на массив увеличит указатель на размер массива, единица добавленная к адресу указывающему на первый элемент массива увеличит указатель на размер элемента.
C++
1
2
3
4
5
6
int a[2] {1, 2};
 
a[2] = 999999999; // пишем за пределы массива (для примера, так делать нельзя!!!)
 
std::cout << **(&a + 1) << std::endl; // увеличить адрес начала массива на размер массива
std::cout << *(a + 1); // увеличить адрес массива на размер элемента.
&a - это взять адрес у массива.
a - тут a не явно, преобразовывается в адрес на первый элемент.

(тема на самом деле не простая, я бы не понял наверное это объяснения если бы увидел в первый раз )
1
0 / 0 / 0
Регистрация: 03.09.2018
Сообщений: 48
26.09.2019, 21:43  [ТС]
DrOffset, оу спасибо, я об этом вообще не подумал. Конечно нельзя тогда.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.09.2019, 21:43
Помогаю со студенческими работами здесь

Арифметика указателей
есть size_t * pointer_1; logfile_f(&quot;\npointer_1 is 0x%X&quot;, pointer_1); есть size_t * pointer_2 = pointer_1 - 284; ...

Арифметика указателей и out of range
Читаю книгу Стивена Праты - Язык программирования С++. В ней присутствует следующее утверждение: &quot;C++ гарантирует, что выражение...

Арифметика указателей (указатель на void*)
У меня есть указатель на void*, который я получил с помощью void *beginPointer = VirtualAlloc(NULL, size, MEM_COMMIT, PAGE_READWRITE);Мне...

Индексация массивов, арифметика указателей
инициализирую одномерный массив и делаю на него указатель const int N = 6; int X = {9,3,2,3,6,8}; int *mas = X; ...

Способы создания объектов и арифметика указателей
Вот сам код: class ListNode { public: ListNode(int val) { next=NULL; i=val; } ListNode*...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru