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

Операции над указателями

27.01.2013, 12:11. Показов 4733. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C
1
2
int var = 123; 
int *p = &var;
(*p)++ и ++*p это одно и тоже. В первом случае приоритет задал скобками.
1)Тогда почему *p++ и *p=*p+1 это не одно и тоже? Почему в первом случае мы сдвигаем адрес памяти, а во втором значение переменной?
2). Почему когда я пишу *p++ у меня выводится именно адрес памяти? По сути же ведь сначала тут идёт разыменование, т.е. получаем число 123 и увеличиваем его затем на 1, и получиться должно 124, но такого не происходит, выводится адрес памяти.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.01.2013, 12:11
Ответы с готовыми решениями:

Какие выражение, включающие операции над указателями, являются корректными?
Помогите пожалуйста ответить на вопрос, и объясните если не сложно. 1)ptr1=ptr+2; 2)ptr1=ptr2/10; 3)ptr1=ptr2-4; 4)ptr1=ptr2^2; ...

Указатели и действия над указателями
char *ptr, result, s1; ptr = strtok(s1, " "); if (strstr(result, strcpy(" ", strcpy(ptr, " "))) == NULL) strcat_s(result,...

Операции с указателями в С++
Используя приведенный ниже код разработать программу, используя в качестве контейнера для хранения данных динамические массивы. Для...

10
5 / 2 / 1
Регистрация: 20.12.2012
Сообщений: 14
27.01.2013, 12:15
приоритет ++ выше, а не равен разыменованию
0
1 / 1 / 1
Регистрация: 27.01.2013
Сообщений: 100
27.01.2013, 12:16  [ТС]
Цитата Сообщение от derrserg Посмотреть сообщение
приоритет ++ выше, а не равен разыменованию
Постфиксный инкремент стоит на самом последнем месте по таблице приоритетов: http://white-knight-is-alive.b... -post.html Вот я и понять не могу.
0
 Аватар для Schizorb
512 / 464 / 81
Регистрация: 07.04.2012
Сообщений: 869
Записей в блоге: 1
27.01.2013, 15:35
aleksandr_t94, судя по Приоритет операций С или Приоритет операций Срр у постфиксного инкремента приоритет выше, чем у разыменования.
0
1 / 1 / 1
Регистрация: 27.01.2013
Сообщений: 100
27.01.2013, 15:55  [ТС]
Цитата Сообщение от Schizorb Посмотреть сообщение
aleksandr_t94, судя по Приоритет операций С или Приоритет операций Срр у постфиксного инкремента приоритет выше, чем у разыменования.
Ну тогда вы меня совсем запутали что к чему. Давайте ещё разок. Объясните пожалуйста с этим указателем как и что, а то что-то совсем плохо((
0
 Аватар для Schizorb
512 / 464 / 81
Регистрация: 07.04.2012
Сообщений: 869
Записей в блоге: 1
27.01.2013, 16:05
*p++

Сначала выполнится инкремент p, то есть увеличивается на 1 сам указатель. Но раз используется постфиксная форма, то возвращаемым значением операции p++ будет прежний адрес, то есть адрес переменной var.

Затем происходит разыменование, оно возвращает значение var.
1
1 / 1 / 1
Регистрация: 27.01.2013
Сообщений: 100
27.01.2013, 16:12  [ТС]
Цитата Сообщение от Schizorb Посмотреть сообщение
*p++

Сначала выполнится инкремент p, то есть увеличивается на 1 сам указатель. Но раз используется постфиксная форма, то возвращаемым значением операции p++ будет прежний адрес, то есть адрес переменной var.

Затем происходит разыменование, оно возвращает значение var.
Да, согласен, но это если использовать *p++ в самом printf. Я написал пример, и тут мне выводится какая-то фигня в виде адреса ячейки памяти(не уверен). А вот если я буду использовать ++*p, то выведется ровно 124, т.е. будет инкремент. Вот я и запутался. Объясните пожалуйста почему если *p++ то выводит фигня, а если ++*p то выводит 124?
C
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
 
int main()
{
    int a=123;
    int *p=&a;
    *p++;
    printf("%d\n",*p);
 
    return 0;
}
0
 Аватар для Schizorb
512 / 464 / 81
Регистрация: 07.04.2012
Сообщений: 869
Записей в блоге: 1
27.01.2013, 16:19
Цитата Сообщение от aleksandr_t94 Посмотреть сообщение
Объясните пожалуйста почему если *p++ то выводит фигня, а если ++*p то выводит 124?
Потому что указатель сдвинулся с помощью инкремента и указывает теперь на какую-то фигню.

++*p работает по-другому. Приоритет префиксного инкремента и операции разыменования одинаков, а выполняться они, исходя из их ассоциативности, будут справа налево. То есть, сначала разыменуется указатель, а к полученному объекту применится инкремент. Значит значение переменной увеличилось на 1, а указатель указывает туда же, куда и указывал.
1
1 / 1 / 1
Регистрация: 27.01.2013
Сообщений: 100
27.01.2013, 16:26  [ТС]
Цитата Сообщение от Schizorb Посмотреть сообщение
Потому что указатель сдвинулся с помощью инкремента и указывает теперь на какую-то фигню.

++*p работает по-другому. Приоритет префиксного инкремента и операции разыменования одинаков, а выполняться они, исходя из их ассоциативности, будут справа налево. То есть, сначала разыменуется указатель, а к полученному объекту применится инкремент. Значит значение переменной увеличилось на 1, а указатель указывает туда же, куда и указывал.
Теперь понял. Хорошо разъяснили. То есть в данном случае: *p++ это тоже самое что *(p++) - сдвигаем указатель и он указывает а область памяти, затем разыменовываем и у нас получается фигня)) Верно?
0
27.01.2013, 17:40

Не по теме:

aleksandr_t94, верно.

1
5 / 2 / 1
Регистрация: 20.12.2012
Сообщений: 14
27.01.2013, 21:58
Тут раздел "Приоритеты операций"

http://ru.wikipedia.org/wiki/%... %B8%D1%8F))
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.01.2013, 21:58
Помогаю со студенческими работами здесь

Операции с указателями
Задание.Создать указатель *ptr на целочисленную переменную и присвоить число 100. Скопировать значения указателя *ptr в указатель *ptr2....

Операции с указателями
Собственно вопрос : есть функция void vyvod(char* prov) { printf(&quot;%s&quot;, prov); } и есть функция void...

Арифметические операции с указателями
Имеется следующий простой код: #include &lt;iostream&gt; using namespace std; int main() { int * ptr; const int SIZE = 3; int...

Арифметические операции с указателями второго порядка
Всем доброго времени суток. Есть собственно псевдокод: (void*)(*(DWORD_PTR*)(reinterpret_cast&lt;void*&gt;(object))); //...

Операции над строками
Заменить в ленте s, начиная с позиции n, все большие буквы на маленькие


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru