Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Помомогите разобраться с указателями


Автор: avitec 15.4.2017, 10:32
Код

#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 на винте, адреса памяти по идее должны выходить реальные) Для тестирования программы использую turbo debugger 3.0 c дополнительным окном CPU просмотра памяти.

Автор: vpf 15.4.2017, 10:41
Распечатайте в одной строке ival, в другой строке pint
Возможно 94:3357  это pint  а на ival не осталось места  %.
И наконец есть же симулятор, пройдитесь по шагам и сразу все станет ясно.

Автор: avitec 15.4.2017, 12:04
Спасибо, вы правы ival вышел нормально как 400 (если в разных строчках) а pint сейчас посмотрю в пошаговом режиме. А как тут плюс/спасибо поставить тому, кто помог с вопросом?

Добавлено через 10 минут и 36 секунд
Цитата(vpf @  15.4.2017,  10:41 Найти цитируемый пост)
И наконец есть же симулятор
  И тут вы тоже правы, огромное спасибо в дебуггере сразу вышел и сегмент и смещение 5959:0094 осталось разобраться каким образом вывести прямо в программе числовое значение сегмента 5959? а не заходить в отладчик для просмотра?

Автор: volatile 15.4.2017, 14:39
Цитата(avitec @  15.4.2017,  10:32 Найти цитируемый пост)
    printf("pint %x %p, ival %x\n",pint,ival);


Автор: avitec 17.4.2017, 07:28
Цитата(volatile @  15.4.2017,  14:39 Найти цитируемый пост)
printf("pint %x %p
 спасибо попробую

Автор: avitec 17.4.2017, 09:14
volatile вы оказались правы, большое спасибо, именно в этом и была ошибка. smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)