Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.12.2013, 15:13   #21
East Undia Trading
Форумчанин
 
Регистрация: 02.10.2013
Сообщений: 231
По умолчанию

Stilet, разобрался.Утром писал не видел.
East Undia Trading вне форума Ответить с цитированием
Старый 08.01.2014, 18:44   #22
East Undia Trading
Форумчанин
 
Регистрация: 02.10.2013
Сообщений: 231
По умолчанию

Продолжим?
Почему будет так
X=FE44
X-=2;
X=FE3C
Но если
X=FE44
X+=2;
То буде X=FE54
Один указатель у меня весит 8 бай.Был вопрос, как я это считаю?На что был ответ, один указатель 8байт, если мы прибавляем к нему 2 то получается 2*8байт=16байт, и это мы прибавляем к адресу в шестнадцат. системе счисления например X=FE44 X+=2; X=FE54.В чем не прав?
Программа та же:
Код:
#include<stdio.h>
#include<conio.h>
int main(void)
{
int *a, b;
float *x, y = 3.5;
double *m, n;
printf("%p\n%p\n%p\n%p\n%p\n%p\n",&a,&b,&x,&y,&m,&n);
a = &b;
printf("  Enter b = ");
scanf("%d", a);
x = &y;
printf("  a = %p\tb = %d\n", a, b);
getch();
b -=(int) y;
printf("  a = %p\t*a = %d\tb = %d\n", a, *a, b);
getch();
m = (double*)a;
printf("  a = %p\tm = %p\n", a, m);
getch();
m = &n;
printf("  n = %p\tm = %p\n", &n, m);
getch();
n = 5.5;
m+=2;
printf("  n = %lf\tn = %p\tm = %p\n", n, &n, m);
getch();
*m = (float) *a - n + (int) *x;
printf("  m = %p\t*m = %lf\n", m, *m);
getch();
m -= 2;
printf("  n = %lf n = %p m = %p *(m+2) = %lf\n", n, &n, m, *(m+2));
printf("%p\n%d\n%p\n%lf\n%p\n%lf\n\n\n\n", a,b,x,y,m,n);
getch();
return 0;
}
Тестирование:
East Undia Trading вне форума Ответить с цитированием
Старый 08.01.2014, 18:59   #23
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
float *x=new float, *x=1;

printf("%x\n",x); x+=2;
printf("%x\n",x); x-=2;
printf("%x",x);
Результат:
Цитата:
3c5688
3c5690
3c5688
И что по твоему я не так делаю?

или по другому:
Код:
float *x=new float; *x=1;

printf("%d\n",x); x+=2;
printf("%d\n",x); x-=2;
printf("%d\n",x); x-=2;
printf("%d\n",x);
Цитата:
5265032
5265040
5265032
5265024
Что тут не так?
I'm learning to live...

Последний раз редактировалось Stilet; 08.01.2014 в 19:01.
Stilet вне форума Ответить с цитированием
Старый 08.01.2014, 19:36   #24
East Undia Trading
Форумчанин
 
Регистрация: 02.10.2013
Сообщений: 231
По умолчанию

Stilet, смещаете указатель на 8 байт влево и вправо, выводите адреса.Вот тут я вижу примерно ту же ситуацию.Видимо я неправильно адреса считаю.По моему тут сначала 8 бит прибавляется, потом 16 вычитают, снова восемь вычитают...
Код:
Цитата:
float *x=new float; *x=1; printf("%d\n",x); x+=2; printf("%d\n",x); x-=2; printf("%d\n",x); x-=2; printf("%d\n",x); 5265032 5265040 5265032 5265024

Последний раз редактировалось East Undia Trading; 08.01.2014 в 19:51.
East Undia Trading вне форума Ответить с цитированием
Старый 08.01.2014, 20:18   #25
East Undia Trading
Форумчанин
 
Регистрация: 02.10.2013
Сообщений: 231
По умолчанию

Разве не так?По какому правилу компьютер это считает и выводит такие адреса?
East Undia Trading вне форума Ответить с цитированием
Старый 08.01.2014, 20:43   #26
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,300
По умолчанию

Во-первых, не бит а байт.
Во-вторых, правило не изменилось - +1 к указателю сдвигает указатель на количество байт, равное размеру одного элемента того типа, на который ссылается указатель.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 08.01.2014, 21:23   #27
East Undia Trading
Форумчанин
 
Регистрация: 02.10.2013
Сообщений: 231
По умолчанию

BDA, как считать разобрался.Все равно непонятно почему будет так
Код:
X=FE44
X-=2;
X=FE3C
Но если
X=FE44
X+=2;
То буде X=FE54
East Undia Trading вне форума Ответить с цитированием
Старый 08.01.2014, 21:43   #28
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Знаешь я тебе дам маленький совет. уж коли взялся за адресную арифметику с нуля, не рассматривай ее на примерах, подобных тому что ты настойчиво и я бы сказал "упоросто" используешь. Рассматривай ее на более простых примерах.
И еще одни совет: Отладчик. Подружись с ним. Иначе гадание на кофейной гуще тебя когда-то погубит.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.01.2014, 21:47   #29
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,300
По умолчанию

Я не вижу на Вашем скриншоте этой ошибки.
http://ideone.com/rQ3RMd
Цитата:
before decrease 0xbfa0e698
after decrease 0xbfa0e688
before increase 0xbfa0e698
after increase 0xbfa0e6a8
Все отлично считается.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 08.01.2014, 22:13   #30
East Undia Trading
Форумчанин
 
Регистрация: 02.10.2013
Сообщений: 231
По умолчанию

BDA, тут я посчитал два раза адреса X.Первый раз убавил два, второй раз прибавил.Оба варианта верны, почему это так?Почему X=FE44 X-=2 X=FE3C это верно если указатель указывает на float?
East Undia Trading вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Известны фамилии,адреса и телефоны 25-ти человек,Найти фамилии и адреса людей,чей телефон начинается с цифры 3. Расмотреть два слу salomon93 Паскаль, Turbo Pascal, PascalABC.NET 11 01.12.2011 23:36
адресная арифметика sterh11001100 Microsoft Office Excel 1 08.12.2010 13:20
Адреса переменных rommster Visual C++ 1 26.11.2010 08:35
Адресная арифметика и матрица. GrindeX Общие вопросы C/C++ 8 08.03.2010 15:03
Адресная книга Snake_ua PHP 6 26.02.2008 09:40