Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
ruslan_net
4 / 4 / 1
Регистрация: 18.09.2012
Сообщений: 38
#1

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

27.09.2012, 19:25. Просмотров 1738. Ответов 10
Метки нет (Все метки)

// 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 Если да, то как вычесть один адрес из другого? Если нет .... что тогда вообще тут делать?
0
Миниатюры
Создать 2 целые переменные и определить «расстояние» между ними в памяти  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.09.2012, 19:25
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Создать 2 целые переменные и определить «расстояние» между ними в памяти (C++):

Скорость первого автомобиля V1 км/ч, второго — V2 км/ч, расстояние между ними S км. Определить расстояние между ними через T часов, если автомобили пе - C++
Скорость первого автомобиля V1 км/ч, второго — V2 км/ч, расстояние между ними S км. Определить расстояние между ними через T часов, если...

как при помощи класса создать 2 точки и найти между ними расстояние - C++
дравствуйте, помогите пожалуста, скажите как при помощи класса создать 2 точки и найти между ними расстояние.Заранее спасибо!:)

Определить расстояние между ними через T часов, если автомобили отдаляются друг от друга. - C++
1) Скорость первого автомобиля V1 км / ч, второго - V2 км / ч, расстояние между ними S км. Определить расстояние между ними через T часов,...

Задача на рекурсию. Найти кратчайшее расстояние между городами i и j даже если между ними нет прямой дороги - C++
Дана матрица размером NxN с расстояниями между городами при наличии прямой дороги между ними. По вертикали содержаться города откуда...

Структура, координаты точек, расстояние между ними. - C++
Доброе время суток. Если можете, помогите найти ошибку. Заранее благодарю. Задача. Найти такую точку пространства, сумма...

Даны координаты двух точек. Вычислить расстояние между ними - C++
Начал изучать С++ совсем не давно. Стал разбираться после чтения некоторых книг, но всё равно, есть некоторые не понятные моменты. Вот...

10
igorrr37
1836 / 1454 / 224
Регистрация: 21.12.2010
Сообщений: 2,403
Записей в блоге: 11
27.09.2012, 20:00 #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;
}
1
ruslan_net
4 / 4 / 1
Регистрация: 18.09.2012
Сообщений: 38
27.09.2012, 21:52  [ТС] #3
Спасибо работает.
Если можно обьясните, что здесь происходит (char*)&a
0
igorrr37
1836 / 1454 / 224
Регистрация: 21.12.2010
Сообщений: 2,403
Записей в блоге: 11
27.09.2012, 22:06 #4
здесь указатели на инт приводятся к указателям на чар чтобы вычислить разность в чарах(байтах) а не в интах(4 байта), т.к. разность указателей на инт была бы в 4 раза меньше

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

Добавлено через 2 минуты
Цитата Сообщение от ruslan_net Посмотреть сообщение
О том что указатель занимает 4 байта я знаю, только вот что имено это в int было умолчено.
это ничего не значит указатель всегда равен 4 байтам хоть на int хоть на char хоть на double хоть на строку(это конечно если мы говорим о 32 разрядной ОС)
1
CheshireCat
Эксперт С++
2903 / 1252 / 81
Регистрация: 27.05.2008
Сообщений: 3,437
28.09.2012, 13:40 #7
Цитата Сообщение от ruslan_net Посмотреть сообщение
Но надо будет как то это преподу обьяснять. Почему правильно char, а не int(или почему не другое). Тут задачу и дали с подковуркой.
На подоквырки надо реагировать. Можешь потроллить препа:
1. во-первых, что такое "расстояние" между переменными? В задаче нет ни определения этого термина, ни определения единиц измерения.
2. во-вторых и главное!! В соответствии с точным смыслом Стандарта языка (5.7 clause 6) вычисление разности указателей, указывающих на различные объекты, не принадлежащие к одному и тому же массиву, приводит к неопределенному поведению программы.... Так что, строго говоря по Стандарту, это "расстояние", в чем бы оно ни измерялось - не определено.
1
Kastaneda
Jesus loves me
Эксперт С++
4749 / 2953 / 242
Регистрация: 12.12.2009
Сообщений: 7,491
Записей в блоге: 2
Завершенные тесты: 1
28.09.2012, 21:34 #8
Цитата Сообщение от CheshireCat Посмотреть сообщение
В соответствии с точным смыслом Стандарта языка (5.7 clause 6) вычисление разности указателей, указывающих на различные объекты, не принадлежащие к одному и тому же массиву, приводит к неопределенному поведению программы....
Ну тут возможно вырвано из контекста и UB нам обещают по другому поводу.
Например
C++
1
int diff = int(ptr1) - int(ptr2);
если даже указатели указывают на невалидную память (например на разрушенный стековый фрейм), то разница адресов то все равно будет вычислена.


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

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

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

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

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

Когда добьюсь чего он все же хочет напишу сюда.
0
ValeryS
Модератор
6961 / 5298 / 522
Регистрация: 14.02.2011
Сообщений: 17,866
28.09.2012, 22:50 #10
Цитата Сообщение от ruslan_net Посмотреть сообщение
Примечание: Кстати! Размер, занимаемый указателем в оперативной памяти не зависит от его типа.
Размер указателя определяется разрядностью операционной системы и тем, сколько байт требуется для
хранения адреса. Например, в 32-разрядной системе это будет 4 байта, в 64-разрядной - 8 байт.
Примечание: Кстати! При вычитании одного адреса из другого, будет получена разница между ними в
элементах заданного ими типа, а не разница в байтах.
так тебе 2 дня про это говорят
0
ruslan_net
4 / 4 / 1
Регистрация: 18.09.2012
Сообщений: 38
03.10.2012, 23:29  [ТС] #11
все подошло
0
03.10.2012, 23:29
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.10.2012, 23:29
Привет! Вот еще темы с ответами:

Найти координаты второй точки, зная первую точку и расстояние между ними - C++
Здравствуйте Знаю, что вопрос наверное из курса по математике 8-ого класса, но что-то меня заклинило и в интернете тоже ничего...

Задача по физике (Определить силу притяжения между телами массы m1 и m2, расстояние между которыми r) - C++
Определить силу притяжения между телами массы m1 и m2, расстояние между которыми r, по формуле F = (m1 + m2) / r2

Расстояние между двумя множествами точек - это расстояние между наиболее близко расположенными точками этих - C++
1. Расстояние между двумя множествами точек - это расстояние между наиболее близко расположенными точками этих множеств. Найти расстояние...

Определить расстояние между автомобилями через Т часов - C++
Скорость первого автомобиля V1 км/ч, второго — V2 км/ч, расстояние между ними S км. Определить расстояние между ними через T часов, если...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru