Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/35: Рейтинг темы: голосов - 35, средняя оценка - 4.83
4 / 4 / 1
Регистрация: 18.09.2012
Сообщений: 38

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

27.09.2012, 19:25. Показов 7441. Ответов 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 Если да, то как вычесть один адрес из другого? Если нет .... что тогда вообще тут делать?
Миниатюры
Создать 2 целые переменные и определить «расстояние» между ними в памяти  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.09.2012, 19:25
Ответы с готовыми решениями:

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

Определить расстояние между ними через T часов
Здравствуйте. Пожалуйста решите: Скорость первого автомобиля V1(Ви один) км/ч, второго V2(Ви два) км/ч, расстояние между ними S км....

Если прямые параллельны, то определить расстояние между ними
Помогите, пожалуйста. Даны две прямые, заданные уравнениями y=k1x+b1 и y=k2x+b2. Если эти прямые параллельны, то определите расстояние...

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

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

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


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

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

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

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

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

Когда добьюсь чего он все же хочет напишу сюда.
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,854
28.09.2012, 22:50
Цитата Сообщение от ruslan_net Посмотреть сообщение
Примечание: Кстати! Размер, занимаемый указателем в оперативной памяти не зависит от его типа.
Размер указателя определяется разрядностью операционной системы и тем, сколько байт требуется для
хранения адреса. Например, в 32-разрядной системе это будет 4 байта, в 64-разрядной - 8 байт.
Примечание: Кстати! При вычитании одного адреса из другого, будет получена разница между ними в
элементах заданного ими типа, а не разница в байтах.
так тебе 2 дня про это говорят
0
4 / 4 / 1
Регистрация: 18.09.2012
Сообщений: 38
03.10.2012, 23:29  [ТС]
все подошло
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.10.2012, 23:29
Помогаю со студенческими работами здесь

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

Определить скорость тел относительно друг друга и расстояние между ними
С высокой башни друг за другом бросают два тела с одинаковыми по величине скоростями. Первое тело бросают вертикально вверх, спустя время...

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

Даны две прямые, заданные уравнениями Если эти прямые параллельны, то определить расстояние между ними
Даны две прямые, заданные уравнениями у=k1x+b1 и y=k2x+b2. Если эти прямые параллельны, то определить расстояние между ними. Помогите...

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


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru