Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.64
programina
2049 / 604 / 41
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
#1

Как инициализировать указатель произвольным адресом? - C++

10.04.2013, 08:30. Просмотров 2072. Ответов 30
Метки нет (Все метки)

Как инициализировать указатель произвольным адресом?
C++
int *ptr;
 
ptr = ? ; // КАК ЭТО СДЕЛАТЬ?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.04.2013, 08:30
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Как инициализировать указатель произвольным адресом? (C++):

как инициализировать указатель на структуру
Помогите розобратся, если можно с краткими примерами... __ как...

Как объявить указатель на массив через typedef и как инициализировать такой тип
Как заставить заработать этот фрагмент кода? INT_L -- указатель на массив из...

Передать указатель в функцию и там его инициализировать
Друзья, как передать указатель в функцию там ему выделить память, чтобы на...

Как получить ссылку на указатель или указатель на указатель в массиве?
В процессе реализации сортировки пузырьком натолкнулся на такую проблему: как...

Как правильно удалять выделенную память под указатель на указатель?
есть код #include <iostream> #include <conio.h> #include <stdlib.h>...

Расскажите, как здесь работает указатель на указатель?
#include "stdafx.h" #include <iostream> #include <locale.h> using namespace...

30
zss
Модератор
Эксперт С++
6953 / 6515 / 4136
Регистрация: 18.12.2011
Сообщений: 17,202
Завершенные тесты: 1
10.04.2013, 08:44 #2
C++
1
2
3
4
5
int n;
ptr=&n;//1 способ переменная уже есть
ptr=new int;//2 способ динамическоесоздание новой переменной
...
delete ptr;//удаление динамически созданной переменной
1
programina
2049 / 604 / 41
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
10.04.2013, 09:19  [ТС] #3
Цитата Сообщение от zss Посмотреть сообщение
C++
1
2
3
int n;
ptr=&n;//1 способ переменная уже есть
ptr=new int;//2 способ динамическоесоздание новой переменной
ну это мне понятно, а как сделать что-то типа такого:
C++
ptr = 0xF0;
?
0
oxotnik
1607 / 1084 / 69
Регистрация: 21.08.2008
Сообщений: 4,562
Записей в блоге: 1
10.04.2013, 09:20 #4
Цитата Сообщение от programina Посмотреть сообщение
ну это мне понятно, а как сделать что-то типа такого:
Вот прям так и сделать. Только... для чего?
1
Croessmah
++Ͻ
14158 / 8083 / 1513
Регистрация: 27.09.2012
Сообщений: 19,921
Записей в блоге: 3
Завершенные тесты: 1
10.04.2013, 09:22 #5
Цитата Сообщение от programina Посмотреть сообщение
а как сделать что-то типа такого:
C++
1
ptr=(int*)0x903280;
1
programina
2049 / 604 / 41
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
10.04.2013, 09:48  [ТС] #6
Цитата Сообщение от Croessmah Посмотреть сообщение
C++
1
ptr=(int*)0x903280;
А в данном случае взят конкретный адрес из ОЗУ?

Добавлено через 3 минуты
Липман писал, что это невозможно

Добавлено через 1 минуту
Цитата Сообщение от oxotnik Посмотреть сообщение
Вот прям так и сделать. Только... для чего?
Для общего развития

Добавлено через 8 минут
Цитата Сообщение от oxotnik Посмотреть сообщение
Только... для чего?
Для хеллворда же
0
taras atavin
4204 / 1763 / 212
Регистрация: 24.11.2009
Сообщений: 27,565
10.04.2013, 09:58 #7
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от programina Посмотреть сообщение
ну это мне понятно, а как сделать что-то типа такого:
C++
1
ptr = 0xF0;
Прямо так, или
C++
1
ptr=(int*)0xF0;
, но при определённых условиях:
1. Целевая система поддерживает статические адреса.
2. Целевой адрес в целевой версии системы статический.
3. Целевой адрес в целевой версии системы точно известен.
4. Программа не будет без изменения исходного текста использована в других версиях системы.
Например, если собираешься скормить исходник кроскомпилятору для спектрума, контроллера, или сигнального камня. Иначе адрес должна поставлять система.

Добавлено через 6 минут
Цитата Сообщение от programina Посмотреть сообщение
Липман писал, что это невозможно
Можно, но вот обратиться по такому адресу в ОЗУ, ПЗУ, кеш, или память перифирийногой девайса, или его адаптера (типа видопамяти) может быть и не возможно.
1
programina
2049 / 604 / 41
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
10.04.2013, 09:58  [ТС] #8
Цитата Сообщение от taras atavin Посмотреть сообщение
Прямо так, или
C++
1
ptr=(int*)0xF0;
, но при определённых условиях:
1. Целевая система поддерживает статические адреса.
2. Целевой адрес в целевой версии системы статический.
3. Целевой адрес в целевой версии системы точно известен.
4. Программа не будет без изменения исходного текста использована в других версиях системы.
Например, если собираешься скормить исходник кроскомпилятору для спектрума, контроллера, или сигнального камня. Иначе адрес должна поставлять система.
А адрес из ОЗУ в данном случае?
0
taras atavin
4204 / 1763 / 212
Регистрация: 24.11.2009
Сообщений: 27,565
10.04.2013, 10:00 #9
Цитата Сообщение от programina Посмотреть сообщение
А адрес из ОЗУ в данном случае?
Адрес - это номер байта, то есть целое число, вот его значение и должно быть на месте F0. И вполне возможно, что 0xF0 как раз и находится в ОЗУ.
1
programina
2049 / 604 / 41
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
10.04.2013, 10:04  [ТС] #10
oxotnik,
Croessmah,
taras atavin,
спасибо
0
oxotnik
10.04.2013, 10:07
  #11

Не по теме:

Цитата Сообщение от programina Посмотреть сообщение
Для хеллворда же
Это который с преферансом и блудницами будет?

1
programina
2049 / 604 / 41
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
10.04.2013, 10:08  [ТС] #12
Да, я немного неправильно прочитала Лимпана, у него написано, что управлять таким динамическим обьектом без косвенной адресации нельзя.
0
alsav22
5438 / 4833 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
10.04.2013, 10:14 #13
Что вы будете с этим указателем делать? Выделением адресов управляет ОС.
1
programina
2049 / 604 / 41
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
10.04.2013, 10:18  [ТС] #14
Цитата Сообщение от alsav22 Посмотреть сообщение
Что вы будете с этим указателем делать? Выделением адресов управляет ОС.
Я хотела узнать какое число хранится в конкретном адресе ОЗУ
1
Pure
228 / 49 / 7
Регистрация: 13.03.2012
Сообщений: 453
Записей в блоге: 7
10.04.2013, 10:24 #15
ну брехня же все. виндовс не даст доступа к физике. этот адрес всегда будет адресом вирутальной памяти того процесса в котором присутствует переменная int *ptr.Это в контроллерах еще можно по адресам куда то попасть на железо.
А в виндовс все будет зависеть от того каков этот адрес. Насколько я понмю существуют защищенные страницы и еще какие то диапазоны к которым не обратишься и обращение вызовет фейл
1
taras atavin
4204 / 1763 / 212
Регистрация: 24.11.2009
Сообщений: 27,565
10.04.2013, 11:21 #16
А мало ли какому кроскомпилу она это скормит? Да и часть системной памяти располагается по статическим адресам, например, статически размещена функция GetProcAdress. Условия допустимости такой адресации названы.
1
Pure
228 / 49 / 7
Регистрация: 13.03.2012
Сообщений: 453
Записей в блоге: 7
10.04.2013, 11:50 #17
Цитата Сообщение от taras atavin Посмотреть сообщение
располагается по статическим адресам
статические адреса? бишь опять таки виртуальные адреса просто всегда занятые в каждом процессе, бишь адреса с доступом только на чтение -выполнение. Об этом было сказано, ты делаешь вид или правда не понимаешь? Может по твоему данная функция оси расположена по физическому адресу ОЗУ? т.е. на твой взгляд адрес сей функции == адрес в ОЗУ. Ты препод или проггер?

Виндовс, как и, предполагаю, линукс не дают доступа к железу. Все виртуальщина уж давно
1
taras atavin
4204 / 1763 / 212
Регистрация: 24.11.2009
Сообщений: 27,565
10.04.2013, 12:56 #18
Цитата Сообщение от Pure Посмотреть сообщение
Может по твоему данная функция оси расположена по физическому адресу ОЗУ?
В dosе разве что, или ещё на какой однозадачной системе, но ведь и оператор разыменования принимает тоже виртуальный адрес и в данном случае он постоянный.

Добавлено через 1 минуту
Цитата Сообщение от Pure Посмотреть сообщение
Виндовс, как и, предполагаю, линукс не дают доступа к железу. Все виртуальщина уж давно
Любой виртуальный адрес соответствует какому то физическому адресу, в данном случае соответствие однозначно для конкретного экземпляра оси, инфа же располагается в ОЗУ, ПЗУ, или ещё какой физической памяти. Другой вопрос, что конкретно 0xF0 может и не существовать.

Добавлено через 5 минут
Почитай ка про алгоритм виртуализации адресов, он построен только на операциях с самим адресом и каталогами страниц, но не занимается формированием инфы, по данному адресу расположенной, когда физический адрес получен, доступ происходит в физическую же память, а пока адрес не выдан, можно подкачать соответствующую страницу.

Добавлено через 6 минут
Даже на винде так. А ведь есть ещё контроллеры и сигнальные камушки без страничной памяти, там адреса сразу физические. Так что пока целевая система не названа, нельзя утверждать, что адрес виртуальный, или не принадлежит ОЗУ.

Добавлено через 2 минуты
В общем случае может быть всё, что угодно.
1
Pure
228 / 49 / 7
Регистрация: 13.03.2012
Сообщений: 453
Записей в блоге: 7
11.04.2013, 10:22 #19
taras atavin, [вырезано цензурой]
все эти адреса - виртуальны и только на этом уровне гарантирована их статичность для тех функций ос о которых ты пишешь. Куда они отобразятся на физику - никаких гарантий нет, а это == мы не знаем физический адрес этой функции GetProceeAddress и не узнаем его, более того это и не нужно, по факту знаем лишь ее виртуальный адрес.
0
taras atavin
4204 / 1763 / 212
Регистрация: 24.11.2009
Сообщений: 27,565
11.04.2013, 10:43 #20
Цитата Сообщение от Pure Посмотреть сообщение
все эти адреса - виртуальны и только на этом уровне гарантирована их статичность для тех функций ос о которых ты пишешь. Куда они отобразятся на физику - никаких гарантий нет,
Куда нибудь отобразятся точно, ТС не сказала, что у неё адрес физический, а виртуальный адрес - это тоже адрес и код физически существует в единственном экземпляре. Кроме того, не названа целевая машина, система и всё остальное. Может именно там адрес сразу физический? Вот смотри: приехал ты в чужой город и говоришь местному: я хочу узнать, что написано на стене дома с пальмой в окне и в пятнадцати метрах к северу от памятника Пушкину мелом на 5 см ниже подоконника первого этажа. Это и есть вирутальный адрес, чему то он соотвествует. Если памятники в городе переедут на новые постаменты, или кто то выставит пальму в другое окно, то соответствие изменится. Но в текущем состоянии прочитать надпись можно и она действительно на стене. Теперь местный сверяется по карте, вспоминает, где могут быть пальмы и говорит: иди на Кирова 57, её пересекает проспект Мира, угол противоположный от пересечения ,находится на нужном расстоянии от памятника и в окне торчит пальма. Это физический адрес. Садишься в такси, едешь по такому адресу и читаешь надпись. В чём проблема? Только в случае винды карту расположения памятников достаёт сам таксист, а табличка с номером дома и названием улицы приезжему остаётся не видна.

Добавлено через 5 минут
Другое дело, что единственный памятник может оказаться в центре площади радиусом метров так 50, тогда указанный виртуальный адрес вообще не существует.
0
11.04.2013, 10:43
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.04.2013, 10:43
Привет! Вот еще темы с решениями:

Почему указатель на указатель объявляется как float **A;
Почему float?

Как сделать функцию, возвращающую указатель на функцию (которая в свою очередь возвращает указатель на массив)
Изучаю c++ по одной книжке.Она говорить не умеет.. Так вот понадобилось...

Как передать параметр типа "указатель на указатель" в функцию?
#include "stdafx.h" #include <conio.h> #include <iostream> using namespace...

Подскажите, как преобразовать строку с IP адресом в число и обратно
Есть IP адрес в std::string "192.168.1.1", нужно преобразовать его в число, а...


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

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

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