Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > С/С++
Перезагрузить страницу Объясните пожалуйста как работают указатели на ОП?
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
avitec avitec вне форума
Новичок
 
Сообщений: 3
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 15.04.2017
По умолчанию Объясните пожалуйста как работают указатели на ОП? - 15.04.2017, 12:24

cpp Код:
#include <stdio.h>
#include <windows.h>
#include <conio.h>

int main(void)
{
    int ival = 1024;
    int *pint; // указатель на объект типа int
    pint = &ival; // pint получает значение адреса ival

   
    printf("pint %x, ival %x\n",pint,ival);
    return 0;
}
после запуска программы, получаю вывод на экран pint 94, ival 3357. Почему в переменной ival оказалось 3357, если я задавал изначально 1024, если даже это число вышло в 16сс, то должно быть 400
И второе почему pint равно 94, ведь оперативная память записывается через сегмент и смещение например 2345:3456 что обозначает это 94 и в каком сегменте памяти оно находится. Код пишу во FreeDos в BorlandC++3.1 (не эмулятор, чистый FreeDos 1.2 на винте, адреса памяти по идее должны выходить реальные)
Ответить с цитированием
  (#2 (permalink)) Старый
avitec avitec вне форума
Новичок
 
Сообщений: 3
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 15.04.2017
По умолчанию 15.04.2017, 13:42

А этот форум рабочий? Почему то нет ответов...
Ответить с цитированием
  (#3 (permalink)) Старый
deckard deckard вне форума
Member
 
Сообщений: 62
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 04.03.2008
По умолчанию 15.04.2017, 16:33

Функция printf получает список переменных через стек, но она ничего не знает
о типах переменных, а интерпретирует их на основе форматной строки.
Если Вы пишете "pint %x", то это видимо будет воспринято как 2 байтовая переменная,
но Вы сами пишете
c Код:
оперативная память записывается через сегмент и смещение (4 байта)
но это не факт, а зависит от модели компиляции.
Таким образом, увидев текст "pint %x" функция printf выберет из стека 2 байта, а
не 4, чем нарушит и вывод следующей переменной ival.

Попробуйте написать так:
c Код:
printf("ival %d\n", ival);
printf("pint %lx\n",pint);

Проверьте модель памяти, в который компилируется программа.
Посмотрите help к функции printf
Ответить с цитированием
  (#4 (permalink)) Старый
avitec avitec вне форума
Новичок
 
Сообщений: 3
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 15.04.2017
По умолчанию 17.04.2017, 08:33

Цитата:
Сообщение от deckard Посмотреть сообщение
Проверьте модель памяти, в который компилируется программа.
Посмотрите help к функции printf
Спасибо за помощь, в программе модель памяти large, это было сразу указано разработчиком в документации прилагаемой к драйверу платы.
Ответить с цитированием
Ads
Ответ

Метки
borlandc++3.1 , ms-dos , с++ , указатели

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Объясните пожалуйста построчно алгоритм Vladislav2015 Prolog 5 27.12.2015 19:03
Объясните пожалуйста смысл части кода MelomanCat Prolog 2 06.06.2013 02:21
Объясните, пожалуйста, как установить программу на Windows 7, x64 Daria147 Windows 7 1 04.07.2012 23:36
Объясните как сделать,пожалуйста! Sorok Вопросы начинающих программистов 9 28.03.2012 23:22
Объясните пожалуйста combobox Любые вопросы от новичков 2 17.07.2011 22:08
пожалуйста объясните как решена задачка Ж.Арсака angelinblack Prolog 2 05.12.2010 16:40
Объясните пожалуйста ))) скорость локальной сети sliders Сетевые подключения 5 22.07.2008 13:31
Объясните пожалуйста, как подключить видеокарту EAX1650XT к телевизору? aneg Техническая поддержка 12 27.04.2007 17:22
Указатели, списки MFC Ikanu Visual C++ 1 26.06.2006 12:35
Разбиение списка, объясните, пожалуйста Tashika Prolog 8 06.04.2006 13:50
Объясните пожалуйста какой транслятор у языка С IRENsuper С/С++ 0 25.06.2005 16:08
Ограничения на указатели в VC++ 6.0 GI Visual C++ 1 24.04.2004 14:43



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов