|
23.06.2011, 19:31
|
#1
|
Нуждающийся
Регистрация: 11.06.2011
Сообщений: 57
Написано 6 полезных сообщений (для 7 пользователей)
|
Указатели
Как, наверное, и у многих начинающих, у меня появились вопросы, касающиеся указателей.
1) Операция &x возвращает указатель. Но почему? Это ведь просто шестнадцатеричное число!
2) Почему имеет значение тип указателя? Ведь это просто ссылка на переменную.
Вопросы, не касающиеся указателей:
3) Почему глобальные переменные при отсутствии инициализации программистом принимают нулевые значения, а локальные - нет?
4) Может ли произойти конфликт между программами - одна заняла память другой.
|
(Offline)
|
|
23.06.2011, 19:34
|
#2
|
Злобный Админ
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений (для 9,330 пользователей)
|
Ответ: Указатели
0x - это шестнадцатеричное число в плюсах
__________________
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
23.06.2011, 19:35
|
#3
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: Указатели
2. От типа данных, зависит размер памяти, который будет занимать данное. И чтобы знать сколько нам ваще получать битов данных, хранится и тип указателя. Либо для каждого участка в памяти, нада было хранить заголовок о занимаемой памяти - а это тупизм (расход памяти впустую).
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
23.06.2011, 19:42
|
#4
|
Нуждающийся
Регистрация: 17.12.2010
Адрес: Санкт-Петербург
Сообщений: 87
Написано 55 полезных сообщений (для 214 пользователей)
|
Ответ: Указатели
1) Колдунство
2) Чтобы через указатель работать с его содержимым, не нужен тип - есть void*
3) Потому, что глобальные создаются один раз вначале и их "не в падлу" обнулить, а вот локальные могут генериться внутри ф-ции которая вызывается много-много раз в цикле и все лишние телодвижения с ними замедляют программу.
4) нет.
PS
А может лучше купить/нагуглить книжку по С/С++? Это будет эффективнее вопросов на форуме.
|
(Offline)
|
|
Эти 4 пользователя(ей) сказали Спасибо ANDREYman за это полезное сообщение:
|
|
23.06.2011, 20:34
|
#5
|
Нуждающийся
Регистрация: 11.06.2011
Сообщений: 57
Написано 6 полезных сообщений (для 7 пользователей)
|
Ответ: Указатели
0x - это шестнадцатеричное число в плюсах
|
Да, но раз операция &a возвращает простое шестнадцатеричное число, то почему компилятор говорит "Cannot convert 'int*' to 'int'."?
2. От типа данных, зависит размер памяти, который будет занимать данное. И чтобы знать сколько нам ваще получать битов данных, хранится и тип указателя. Либо для каждого участка в памяти, нада было хранить заголовок о занимаемой памяти - а это тупизм (расход памяти впустую).
|
То есть если бы не было типа у указателей, то программа бы не знала, сколько брать байтов и сколько резервировать при операции *p?
Но как так, ведь когда ты пишешь
то компьютер использует именно 4 байта, а значит, знает, что переменная a имеет тип integer. Как же тогда это организовано?
3) Потому, что глобальные создаются один раз вначале и их "не в падлу" обнулить, а вот локальные могут генериться внутри ф-ции которая вызывается много-много раз в цикле и все лишние телодвижения с ними замедляют программу.
Понял, спасибо :D
А как одна программа узнает, что какое-то место занято памяти занято другой программой?
А может лучше купить/нагуглить книжку по С/С++? Это будет эффективнее вопросов на форуме.
|
Я прошел тему "Указатели" в учебнике, но там про это не было написано.
Спасибо за ответы!
|
(Offline)
|
|
23.06.2011, 21:05
|
#6
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: Указатели
|
(Offline)
|
|
23.06.2011, 21:27
|
#7
|
Нуждающийся
Регистрация: 17.12.2010
Адрес: Санкт-Петербург
Сообщений: 87
Написано 55 полезных сообщений (для 214 пользователей)
|
Ответ: Указатели
Hagrael,
Вероятно это потому, что по умолчанию в С++ адреса в явном виде пишутся в шестнадцатиричной системе. Сделай преобразование типов и будет тебе счастье.
Указатель - это просто адрес записанный в 4 или 8 байт в зависимости от разрядности системы, а чтобы через него работать с тем, что по этому адресу лежит - нужно знать что там лежит, вот за этим ему и нужен тип.
У каждой своя область памяти, за попытку подмять чужую ОС бъёт битой по голове.
Думаю, тебе будет полезно начать не с изучения плюсов, а с архитектуры компов.
Последний раз редактировалось ANDREYman, 23.06.2011 в 23:46.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 07:00.
|