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

Почему увеличение указателя на sizeof(тип) не тождественно инкременту этого же указателя?

04.11.2016, 20:19. Показов 2206. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго дня.
Можете обьяснить ,почему при инкриментировании указателя,его значение(адресс) увеличивается на 4 (размер int в байтах),а при увеличении : y(указатель)+=sizeof(int) ,его значение(адресс) увеличивается не на 4 байта а на 16?
В учебнике написано что y(указатель)+=sizeof(int) должно быть эквивалентно y++ ,что и логично
пример программы:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <stdio.h>
#include <stdint.h>
 
using namespace std;
 
int main()
{
int w,*y=&w;
printf("pointer before : %d\n",y);
y++;
printf("pointer after : %d\n",y);
/* (y++)-y=4 байта(размер int) */
y--;
printf("pointer before : %d\n",y);
y+=sizeof(int);
printf("pointer after : %d\n",y);
/* (y+sizeof(int))-y=16 ???? ведь размер int=4 байта,и сдвиг должен произойти на 4 байта*/
return 0;
}
вывод:

pointer before : 2686728
pointer after : 2686732
pointer before : 2686728
pointer after : 2686744

Написанно и скомпелированно в IDE,CODE::BLOCKs
Компилятор:g++ follow the 1998 ISO C++ language standard
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.11.2016, 20:19
Ответы с готовыми решениями:

Создание указателя на экземпляр класса, описанного после объявления указателя
Здравствуйте! Проблема в том, что нужно сделать так: class A{ public: B* b = nullptr; }; class B{ public:

Как сделать функцию от указателя на класс и указателя на метод?
Не получается сделать функцию, параметрами которой являются указатель на класс и на метод. Обращаться к классу нужно именно по указателю,...

Преобразование кода без указателя в код с использованием указателя
Правильно ли выполнил? Исходный код без указателя #include &lt;iostream&gt; #include &lt;cstdlib&gt; #include &lt;fstream&gt; using...

4
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
04.11.2016, 20:41
Цитата Сообщение от javay Посмотреть сообщение
y(указатель)+=sizeof(int) должно быть эквивалентно y++
В свою очередь y++ эквивалентно y += 1.
Наводит на какие-либо мысли?
1
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
04.11.2016, 20:41
Лучший ответ Сообщение было отмечено javay как решение

Решение

C++
1
2
3
4
5
       ++y;
       y = y + 1;
       
       y += sizeof(int);
       y = y + 4;
1
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
04.11.2016, 20:44
Вот такой это язык Си(++). Если указатель объявлен TYP *p, то вся арифметика с указателем p учитывает sizeof(TYP) без твоей помощи. Т.е. p = p + 10 увеличивает p так, чтобы он указывал на 10-й элемент TYP-массива. Т.е. еси считать в байтах, увеличивает ровно на 10*sizeof(TYP)

Добавлено через 2 минуты
Цитата Сообщение от javay Посмотреть сообщение
В учебнике написано что y(указатель)+=sizeof(int) должно быть эквивалентно y++ ,что и логично
Или протри глаза, или выкинь учебник на помойку. А лучше сжечь, чтоб никому эта ахинея больше не попалась. Если, конечно, ты уверен в своих глазах. Но, имхо, проблема скорее всего в них.
1
 Аватар для javay
0 / 0 / 0
Регистрация: 07.08.2016
Сообщений: 105
04.11.2016, 20:50  [ТС]
Все,я догнал
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.11.2016, 20:50
Помогаю со студенческими работами здесь

В чём отличие константного указателя и указателя на константу?
int *const p1 и int const* p2 Объясните мне в чём тут отличие.

Возвращение неконстантного указателя из константного указателя на строку
Не могу до конца понять один момент. Допустим, у нас есть функция searchSymbol, которая принимает два параметра: константный указатель на...

Инкрементальное увеличение значения указателя не работает
Сразу скажу, что практической цели никакой нет, просто пытаюсь понять принцип работы изменения значения указателя. Есть такой код: ...

Узнать тип значения, зная тип указателя
Здравствуйте! Есть такой код: template&lt;class Iter&gt; void func(Iter first, Iter last) { //... Iter_value_type = *first;...

Несовместимый тип указателя
Здравствуйте. Допустим, есть что-то вроде такого вот: void inputAnalys( const int* num, const char** param ) {} main( int argc, char...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru