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

Адресная арифметика

27.04.2015, 14:53. Показов 3089. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Помогите мне понять такой вопрос.
Есть указатель на первый элемент массива . Скажите для того , чтобы изменить его и заставить ссылаться на второй элемент массива почему я должен делать *p++, а не p++? Ведь по идее если я делаю *p++, то я изменяю значение первого элемента массива на единицу, но почему вместе с этим меняется адрес на 4 байта(в моём примере int).Он же не должен меняться , т.к * это операция взятия значения по указанному адресу.Т.е в моем случае , как я понимаю, просто mass[0] - его значение должно быть 2, а у меня происходит то, что адрес указателя смещается на следующий элемент. Почему так?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// masspointer.cpp: определяет точку входа для консольного приложения.
//
#include "stdafx.h"
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
 
int _tmain(int argc, _TCHAR* argv[])
{
    int mass[10];
    mass[0] = 1;
    mass[1] = 7;
    int *p = mass;
    printf("%d", *p);
    printf("\n%d", p);
    *p++;//указатель уже ссылается на другой элемент
    printf("\n\n%d", *p);
    printf("\n%d", p);
    _getch();
    return 0;
}
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.04.2015, 14:53
Ответы с готовыми решениями:

Адресная арифметика
Народ!!! Пожайлуста просвятите! Мне важно понять принцип хранения переменных различных типов данных в языках С++ и С#(например как в...

Адресная арифметика
Почему не работает данная программа? По идее после применения постфиксного инкремента у меня в указателе в конце p должен храниться адрес...

Адресная арифметика
Здравствуйте! Изучал я тут, значится, на досуге функции с переменным числом параметров. Тема, казалось бы, элементарная, но у меня она...

4
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
27.04.2015, 15:06
Цитата Сообщение от jonygibson Посмотреть сообщение
почему я должен делать *p++, а не p++?
почему ты должен не знаю. А по делу, p++ или ++p правильно. Не прочитал что нужно изменять. В таком случае (*p)++
Цитата Сообщение от jonygibson Посмотреть сообщение
едь по идее если я делаю *p++, то я изменяю значение первого элемента массива на единицу
приоритет инкремента выше.
1
Заблокирован
27.04.2015, 15:08
Лучший ответ Сообщение было отмечено jonygibson как решение

Решение

Цитата Сообщение от jonygibson Посмотреть сообщение
Ведь по идее если я делаю *p++, то я изменяю значение первого элемента массива на единицу, но почему вместе с этим меняется адрес на 4 байта
Вся фишка в приоритетах операций. Что бы было так, как ты пишешь (изменить первый элемент) нужно писать так
C++
1
(*p)++
0
0 / 0 / 1
Регистрация: 24.04.2014
Сообщений: 139
27.04.2015, 15:13  [ТС]
Цитата Сообщение от Jewbacabra Посмотреть сообщение
почему ты должен не знаю. А по делу, p++ или ++p правильно.
a *p++ неправильно? Почему тогда работает? Меня интересует , почему в этой операции адрес, который хранится в указателе увеличивается на 4 байта, хотя должно увеличиться на единицу только то значение , которое лежит по этому адресу?

Добавлено через 1 минуту
Цитата Сообщение от Lost_Eden Посмотреть сообщение
(*p)++
Ухты а это я понял спасибо) написали бы сразу про скобочки)
0
Заблокирован
27.04.2015, 15:15
Цитата Сообщение от jonygibson Посмотреть сообщение
a *p++ неправильно? Почему тогда работает? Меня интересует , почему в этой операции адрес, который хранится в указателе увеличивается на 4 байта, хотя должно увеличиться на единицу только то значение , которое лежит по этому адресу?
Тут ты сначала инкрементируешь указатель, потом уже берёшь значение. Соответственно эта операция бессмысленна в данном случае.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.04.2015, 15:15
Помогаю со студенческими работами здесь

Распределение памяти и адресная арифметика
Добрый день. Помогите с заданием пожалуйста... Задание №1 1. Описание переменных предварительно определенных типов insigned short -...

многомерные массивы. динамическое выделение паняти, адресная арифметика
нужно написать программу подсчета среднего арифметического элементтов целочисленного массива(размерность массива вводит пользователь)...

Указатели, адресная арифметика и передача аргументов функций по значению и по ссылке
Подскажите, пожалуйста, как решить такую задачу вручную. На экзамене предложат задание такого типа НА БУМАГЕ, и надо будет написать, что...

Ошибка в программе, адресная арифметика(Компилятор выдает ошибку "Cannot conver int* to int")
#include &lt;stdio.h&gt; #include &lt;time.h&gt; #include &lt;stdlib.h&gt; #include &lt;alloc.h&gt; int size=(int*)malloc(50*sizeof (int)) { for...

адресная строка
как из программы на с++ получить доступ к адресной строке браузера? в эту адресную строку надо будет вставить свое инфо (произвольная...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru