Форум программистов, компьютерный форум CyberForum.ru

Создать 2 целые переменные и определить «расстояние» между ними в памяти - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
ruslan_net
4 / 4 / 1
Регистрация: 18.09.2012
Сообщений: 38
27.09.2012, 19:25     Создать 2 целые переменные и определить «расстояние» между ними в памяти #1
// dz13_3.cpp : Defines the entry point for the console application.
// Создать 2 целые переменные и определить «расстояние» между ними в памяти

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include "stdafx.h"
#include <iostream>
#include <Windows.h>
using namespace std;
 
void main()
 
 
{
    int a=5,b=10,c;
    int *pa=&a,*pb=&b;
    cout<<"a="<<a<<"\t&a="<<&a<<"\t*pa="<<*pa<<endl;
    cout<<"b="<<b<<"\t&b="<<&b<<"\t*pb="<<*pb<<endl;
    
    //cout<<"c= ",c;
 
 
    system("Pause");
}
Я так понимаю, что растояние между перемеными будет адрес переменой А - адрес переменой В
(т.е. &a-&b), но так оно работать не хочет.
Вопрос такой:
1 правильно ли я понимаю?
2 Если да, то как вычесть один адрес из другого? Если нет .... что тогда вообще тут делать?
Миниатюры
Создать 2 целые переменные и определить «расстояние» между ними в памяти  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.09.2012, 19:25     Создать 2 целые переменные и определить «расстояние» между ними в памяти
Посмотрите здесь:

C++ как при помощи класса создать 2 точки и найти между ними расстояние
C++ Структура, координаты точек, расстояние между ними.
C++ Определить расстояние между ними через T часов, если автомобили отдаляются друг от друга.
C++ Задача на рекурсию. Найти кратчайшее расстояние между городами i и j даже если между ними нет прямой дороги
Скорость первого автомобиля V1 км/ч, второго — V2 км/ч, расстояние между ними S км. Определить расстояние между ними через T часов, если автомобили пе C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
igorrr37
 Аватар для igorrr37
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 7
27.09.2012, 20:00     Создать 2 целые переменные и определить «расстояние» между ними в памяти #2
C++
1
2
3
4
5
6
7
8
#include <iostream>
 
int main()
{
    int a = 10, b = 20;
    std::cout << "&a: " << &a << "\n&b: " << &b << "\n&a - &b: " << ((char*)&a - (char*)&b) << std::endl;
    return 0;
}
ruslan_net
4 / 4 / 1
Регистрация: 18.09.2012
Сообщений: 38
27.09.2012, 21:52  [ТС]     Создать 2 целые переменные и определить «расстояние» между ними в памяти #3
Спасибо работает.
Если можно обьясните, что здесь происходит (char*)&a
igorrr37
 Аватар для igorrr37
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 7
27.09.2012, 22:06     Создать 2 целые переменные и определить «расстояние» между ними в памяти #4
здесь указатели на инт приводятся к указателям на чар чтобы вычислить разность в чарах(байтах) а не в интах(4 байта), т.к. разность указателей на инт была бы в 4 раза меньше

Добавлено через 4 минуты
плюс стек растёт к младшим адресам, поэтому адрес a(создана раньше) больше чем адрес b(создана позже)
ruslan_net
4 / 4 / 1
Регистрация: 18.09.2012
Сообщений: 38
28.09.2012, 00:38  [ТС]     Создать 2 целые переменные и определить «расстояние» между ними в памяти #5
ну я понимаю, что приводим к char и подставил посмотрел int. Но надо будет как то это преподу обьяснять. Почему правильно char, а не int(или почему не другое). Тут задачу и дали с подковуркой. О том что указатель занимает 4 байта я знаю, только вот что имено это в int было умолчено. Может можно ссылку, что бы почитать по подробнее или обьясните. Хочется разобраться.
По поводу стека даже вопрос не возникал(тут понятно), но все равно спасибо.
ValeryS
Модератор
6373 / 4839 / 440
Регистрация: 14.02.2011
Сообщений: 16,038
28.09.2012, 00:47     Создать 2 целые переменные и определить «расстояние» между ними в памяти #6
Цитата Сообщение от ruslan_net Посмотреть сообщение
Почему правильно char, а не int
char всегда занимает один байт (а размер меряем в байтах)
int в винде 32 разрядной 4 байта
если ты не приведешь разница будет в int-ах т.е для соседних переменных 1(один int 4 байта)
а если приведешь то покажет сразу 4 байта

Добавлено через 2 минуты
Цитата Сообщение от ruslan_net Посмотреть сообщение
О том что указатель занимает 4 байта я знаю, только вот что имено это в int было умолчено.
это ничего не значит указатель всегда равен 4 байтам хоть на int хоть на char хоть на double хоть на строку(это конечно если мы говорим о 32 разрядной ОС)
CheshireCat
Эксперт С++
2907 / 1235 / 78
Регистрация: 27.05.2008
Сообщений: 3,307
28.09.2012, 13:40     Создать 2 целые переменные и определить «расстояние» между ними в памяти #7
Цитата Сообщение от ruslan_net Посмотреть сообщение
Но надо будет как то это преподу обьяснять. Почему правильно char, а не int(или почему не другое). Тут задачу и дали с подковуркой.
На подоквырки надо реагировать. Можешь потроллить препа:
1. во-первых, что такое "расстояние" между переменными? В задаче нет ни определения этого термина, ни определения единиц измерения.
2. во-вторых и главное!! В соответствии с точным смыслом Стандарта языка (5.7 clause 6) вычисление разности указателей, указывающих на различные объекты, не принадлежащие к одному и тому же массиву, приводит к неопределенному поведению программы.... Так что, строго говоря по Стандарту, это "расстояние", в чем бы оно ни измерялось - не определено.
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
28.09.2012, 21:34     Создать 2 целые переменные и определить «расстояние» между ними в памяти #8
Цитата Сообщение от CheshireCat Посмотреть сообщение
В соответствии с точным смыслом Стандарта языка (5.7 clause 6) вычисление разности указателей, указывающих на различные объекты, не принадлежащие к одному и тому же массиву, приводит к неопределенному поведению программы....
Ну тут возможно вырвано из контекста и UB нам обещают по другому поводу.
Например
C++
1
int diff = int(ptr1) - int(ptr2);
если даже указатели указывают на невалидную память (например на разрушенный стековый фрейм), то разница адресов то все равно будет вычислена.


Цитата Сообщение от CheshireCat Посмотреть сообщение
1. во-первых, что такое "расстояние" между переменными? В задаче нет ни определения этого термина, ни определения единиц измерения.
А вот это в тему, да

Добавлено через 1 минуту
А, по поводу первого, понял. Похоже имеется ввиду арифметика указателей, но в моем примере ее нет, есть простая арифметика целых чисел.
ruslan_net
4 / 4 / 1
Регистрация: 18.09.2012
Сообщений: 38
28.09.2012, 22:35  [ТС]     Создать 2 целые переменные и определить «расстояние» между ними в памяти #9
Вопрос сюда и преподу задал одинаковый. Вот, что он отоветил:
- нет, неправильно, почитайте внимательно сносочки мелким шрифтом в конспекте лекций

А в конспекте лекций сноски такие:

Примечание: Кстати! Размер, занимаемый указателем в оперативной памяти не зависит от его типа.
Размер указателя определяется разрядностью операционной системы и тем, сколько байт требуется для
хранения адреса. Например, в 32-разрядной системе это будет 4 байта, в 64-разрядной - 8 байт.

Примечание: Кстати! При вычитании одного адреса из другого, будет получена разница между ними в
элементах заданного ими типа, а не разница в байтах.

Когда добьюсь чего он все же хочет напишу сюда.
ValeryS
Модератор
6373 / 4839 / 440
Регистрация: 14.02.2011
Сообщений: 16,038
28.09.2012, 22:50     Создать 2 целые переменные и определить «расстояние» между ними в памяти #10
Цитата Сообщение от ruslan_net Посмотреть сообщение
Примечание: Кстати! Размер, занимаемый указателем в оперативной памяти не зависит от его типа.
Размер указателя определяется разрядностью операционной системы и тем, сколько байт требуется для
хранения адреса. Например, в 32-разрядной системе это будет 4 байта, в 64-разрядной - 8 байт.
Примечание: Кстати! При вычитании одного адреса из другого, будет получена разница между ними в
элементах заданного ими типа, а не разница в байтах.
так тебе 2 дня про это говорят
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.10.2012, 23:29     Создать 2 целые переменные и определить «расстояние» между ними в памяти
Еще ссылки по теме:

Задача по физике (Определить силу притяжения между телами массы m1 и m2, расстояние между которыми r) C++
Даны координаты двух точек. Вычислить расстояние между ними C++
Найти координаты второй точки, зная первую точку и расстояние между ними C++

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

Или воспользуйтесь поиском по форуму:
ruslan_net
4 / 4 / 1
Регистрация: 18.09.2012
Сообщений: 38
03.10.2012, 23:29  [ТС]     Создать 2 целые переменные и определить «расстояние» между ними в памяти #11
все подошло
Yandex
Объявления
03.10.2012, 23:29     Создать 2 целые переменные и определить «расстояние» между ними в памяти
Ответ Создать тему
Опции темы

Текущее время: 07:41. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru