|
БТР - мой друг
333 / 277 / 47
Регистрация: 07.01.2010
Сообщений: 1,932
|
|
Указатели23.06.2011, 20:08. Показов 6991. Ответов 54
Метки нет (Все метки)
1) Указатель можно инициализирвоать только с помощью операции *p=&a? А как записать адрес переменной в простую переменную (я пытался это делать через операцию b=&a, но компилятор ругается, говорит, что операция &a возвращает указатель.
2) Почему имеет значение тип указателя? Ведь это просто ссылка на переменную. И еще один вопрос, не касающийся указателей: 3) Как программа узнает, какие места ОЗУ ей можно занимать (не заняты др. программой), а какие - нет.
0
|
|
| 23.06.2011, 20:08 | |
|
Ответы с готовыми решениями:
54
Указатели и указатели на указатели, а также типы данных Через указатели на указатели посчитать сумму двух чисел и записать в третье Почему Лафоре использует указатели на указатели, вместо обмена значениями указателей? |
|
|
||||||||||
| 25.06.2011, 17:14 | ||||||||||
Добавлено через 3 минуты Добавлено через 1 час 10 минут Виртуальная память с точки зрения программы непрерывна, а с точки зрения операционки, она фрагментирована, и фрагменты лежат в разных местах физической памяти, может даже не по порядку или даже в свопе. Операционка делает так, чтобы (1) программа не задумывалась о том, где реально находится её память и как к ней подобраться и (2) чтобы две программы сидели каждая в своём виртуальном адресном пространстве и не портили друг другу данные. Добавлено через 18 секунд Извините, не сразу заметил апдейт
1
|
||||||||||
|
|
|
| 25.06.2011, 18:15 | |
|
В Windows 32 - разрядных виртуалка начинается 64-kb со свободного блока с нулевым адресом, выгружаемый пул ядра от 0xE1000000 до 0xECFFFFFF = 192mb для хранения динамических структур компонентов ядра. Все пользовательские процессы загружаться в нижнюю часть 2gb-виртуальной памяти а системные верхнию часть dll/sys - драйверы устройств только в верхней области виртуальной памяти доступен весь блок памяти процессов 4gb, все системные модули такие как gdi32, kernel32, user32 и т.п, работают для всех пользовательских процессов в одном экземпляре, также можно создать общий модуль для всех процессов.
1
|
|
|
186 / 186 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
|
||||||
| 25.06.2011, 18:44 | ||||||
|
Допустим есть две запущенные программы. Для каждой система выделила виртуальную память.
Адрес начала этой виртуальной памяти 0x00000000? А теперь представим, что эти две программы одинаковые. Тогда будут ли виртуальные адреса переменных совпадать? Если да, то почему эта программа выводит разные адреса, если ее несколько раз запустить? :
1
|
||||||
|
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
|
|
| 25.06.2011, 18:59 | |
|
Chelioss, потому как КАЖДАЯ запущенная программа - это отдельеный процесс, для которого создается отдельный дескриптор и свои таблицы страниц виртуальной памяти. Каждый отдельный процесс имеет собственную виртуальную память и соотеветстсенно, никак не пересекающуюся с другими процессами реальную. Реальная тоже может совпадать, так как страницы могут распределяться таким образом.
Далее, каждый процесс еще и СОБСТВЕННЫЙ стек имеет. А все локальные переменные - они в стеке... ![]() Это не зависит, одна и та же прога запускалась или разные.
2
|
|
|
БТР - мой друг
333 / 277 / 47
Регистрация: 07.01.2010
Сообщений: 1,932
|
||||||||||||
| 25.06.2011, 20:21 [ТС] | ||||||||||||
|
talis, спасибо за объяснение.
Но вопросы еще остались. Ядро ОС - это ОЗУ, как я понимаю? А почему такой код:
Мне еще не до конца понятно, почему здесь все говорят, что операция &a возвращает адрес переменной, а не указатель. Но ведь (повторюсь) возвращаемое значение имеет тип type* - тип указателя, а следовательно, это не адрес (простое число), а указатель! Не могли бы вы сказать, отличаются ли следующие явные приведения типов технически:
И хотелось бы узнать, конструкции, подобные static_cast<type_to>(variable) обрабатываются по ходу программы или на уровне компилятора? В смысле, может ли пользователь создавать подобные конструкции? (с угловыми скобками etc). int во 2-ом случае вызывается как функция или это обрабатывается компилятором по-особому? И 3-ий вариант тоже весьма интересен. Почему нельзя записать просто b=int a? Заранее благодарю за ответы. Добавлено через 2 минуты
0
|
||||||||||||
|
187 / 174 / 18
Регистрация: 22.03.2010
Сообщений: 612
|
|||
| 25.06.2011, 20:54 | |||
|
0
|
|||
|
БТР - мой друг
333 / 277 / 47
Регистрация: 07.01.2010
Сообщений: 1,932
|
|
| 25.06.2011, 20:57 [ТС] | |
|
pito211, позже я доберусь и до ассемблера, однако пока хочется узнать механизмы.
0
|
|
|
187 / 174 / 18
Регистрация: 22.03.2010
Сообщений: 612
|
|||
| 25.06.2011, 21:11 | |||
|
да уже сто раз тут все механизмы обсудили, указатели разжевали как только могли, а ты до сих пор задаёшь одни и те же вопросы. Про виртуальную память всё подробно расписано в книге, которую я привёл выше. Может лучше её открыть, а не дёргать других людей по пустякам, уж наверно у них есть дела поважнее, чем цитирование литературы, находящейся в свободном доступе? Накрайняк можно в педивикию заглянуть
Добавлено через 4 минуты Добавлено через 1 минуту
1
|
|||
|
БТР - мой друг
333 / 277 / 47
Регистрация: 07.01.2010
Сообщений: 1,932
|
|
| 25.06.2011, 21:14 [ТС] | |
|
pito211, в моей книге этих нюансов не описывается, а главу "Указатели" я полностью прошел. Я не заставляю никого помогать и не испытываю злобу на людей этого форума, которые мне не помогают
Но будьте добры, не заводите впредь эту тему, если конкретную литературу вы не посоветуете. А эта тема действительно будет полезна не только мне, но и другим новичкам, ведь здесь все изложено кратко.
0
|
|
|
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
|
|
| 25.06.2011, 21:23 | |
|
Hagrael, немного про адреса и указатели.
Память - это массив байтов. А элементы массива, как ты знаешь, ПРОНУМЕРОВАНЫ. От 0 до n-1. В 32-битной машине этот массив имеет размер 2^32 = 4 гб. Номер элемента памяти - это и есть адрес. Это положительное целое число. Указатель - это переменная, которая хранит этот номер-адрес. В С++ принято, что при выводе на экран значение указателя (целое число-номер элемента памяти) выводится в шестнадцатеричной системе.
1
|
|
|
4226 / 1799 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
||||||||
| 26.06.2011, 10:30 | ||||||||
Добавлено через 13 минут
0
|
||||||||
|
БТР - мой друг
333 / 277 / 47
Регистрация: 07.01.2010
Сообщений: 1,932
|
|||||||||||
| 26.06.2011, 10:34 [ТС] | |||||||||||
|
Странная вещь у меня тут возникла. Вот код:
0
|
|||||||||||
|
4226 / 1799 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
| 26.06.2011, 10:35 | |
|
0
|
|
|
БТР - мой друг
333 / 277 / 47
Регистрация: 07.01.2010
Сообщений: 1,932
|
|
| 26.06.2011, 10:36 [ТС] | |
|
Непонятно вообще, зачем массив делают константой.
0
|
|
|
Заблокирован
|
|||
| 26.06.2011, 11:38 | |||
|
int m[]; int * p = m; // or int * p = &m[0]; В рантайме невозможно в принципе узнать, какой тег следует приписать указателю - массив или нет. Однако, есть безопасная функция, которая позволяет узнать сколько было заявлено при new [количество] ??? И да, кстати: int* iPtr = new int [10]; delete [] iPtr; Как вы видите, при удалении данных не нужно указывать явное количество. Напрашивается вывод: реализация delete[] знает точное количество элементов. Внимание вопрос: если нечто знает количество элементов, на кой чорт это количество дополнительно помнить? Вопрос номер два: как узнать, какое количество элементов было выделено с помощью new[] Варианты с шаманством над адресами не предлагать. Существует безопасная функция. Вопрос номер три: как узнать, на какое количество элементов вообще ссылается указатель iPtr ? У кого и как об этом можно спросить? Главный вопрос номер четыре: Как научить клиентский код различать указатель на объект от указателя на массив? Добавлено через 36 минут /ps константность иногда убивает инкапсуляцию.
0
|
|||
| 26.06.2011, 11:38 | |
|
Используя нетипизированные указатели и указатели на подпрограммы обобщить сортировку пузырьком Есть три переменные. Используя указатели на указатели, поменять значение максимальной и минимальной переменной Указатели на указатели с числами. Почему можно присвоить число в 4-ый элемент, если массив из 2 элементов? Зачем нужны все эти указатели (или не указатели)
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман.
Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
|
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
|