Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > C++

Ответ
 
Опции темы
Старый 23.06.2011, 19:31   #1
Hagrael
Нуждающийся
 
Регистрация: 11.06.2011
Сообщений: 57
Написано 6 полезных сообщений
(для 7 пользователей)
Сообщение Указатели

Как, наверное, и у многих начинающих, у меня появились вопросы, касающиеся указателей.
1) Операция &x возвращает указатель. Но почему? Это ведь просто шестнадцатеричное число!
2) Почему имеет значение тип указателя? Ведь это просто ссылка на переменную.

Вопросы, не касающиеся указателей:
3) Почему глобальные переменные при отсутствии инициализации программистом принимают нулевые значения, а локальные - нет?
4) Может ли произойти конфликт между программами - одна заняла память другой.
(Offline)
 
Ответить с цитированием
Старый 23.06.2011, 19:34   #2
SBJoker
Злобный Админ
 
Аватар для SBJoker
 
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений
(для 9,330 пользователей)
Ответ: Указатели

0x - это шестнадцатеричное число в плюсах
__________________
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Hagrael (23.06.2011)
Старый 23.06.2011, 19:35   #3
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Указатели

2. От типа данных, зависит размер памяти, который будет занимать данное. И чтобы знать сколько нам ваще получать битов данных, хранится и тип указателя. Либо для каждого участка в памяти, нада было хранить заголовок о занимаемой памяти - а это тупизм (расход памяти впустую).
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Hagrael (23.06.2011)
Старый 23.06.2011, 19:42   #4
ANDREYman
Нуждающийся
 
Аватар для ANDREYman
 
Регистрация: 17.12.2010
Адрес: Санкт-Петербург
Сообщений: 87
Написано 55 полезных сообщений
(для 214 пользователей)
Ответ: Указатели

1) Колдунство
2) Чтобы через указатель работать с его содержимым, не нужен тип - есть void*
3) Потому, что глобальные создаются один раз вначале и их "не в падлу" обнулить, а вот локальные могут генериться внутри ф-ции которая вызывается много-много раз в цикле и все лишние телодвижения с ними замедляют программу.
4) нет.

PS
А может лучше купить/нагуглить книжку по С/С++? Это будет эффективнее вопросов на форуме.
(Offline)
 
Ответить с цитированием
Эти 4 пользователя(ей) сказали Спасибо ANDREYman за это полезное сообщение:
Hagrael (23.06.2011), Reks888 (23.06.2011), SBJoker (23.06.2011), St_AnGer (23.06.2011)
Старый 23.06.2011, 20:34   #5
Hagrael
Нуждающийся
 
Регистрация: 11.06.2011
Сообщений: 57
Написано 6 полезных сообщений
(для 7 пользователей)
Ответ: Указатели

0x - это шестнадцатеричное число в плюсах
Да, но раз операция &a возвращает простое шестнадцатеричное число, то почему компилятор говорит "Cannot convert 'int*' to 'int'."?
2. От типа данных, зависит размер памяти, который будет занимать данное. И чтобы знать сколько нам ваще получать битов данных, хранится и тип указателя. Либо для каждого участка в памяти, нада было хранить заголовок о занимаемой памяти - а это тупизм (расход памяти впустую).
То есть если бы не было типа у указателей, то программа бы не знала, сколько брать байтов и сколько резервировать при операции *p?
Но как так, ведь когда ты пишешь
int a;
a=5;
то компьютер использует именно 4 байта, а значит, знает, что переменная a имеет тип integer. Как же тогда это организовано?
3) Потому, что глобальные создаются один раз вначале и их "не в падлу" обнулить, а вот локальные могут генериться внутри ф-ции которая вызывается много-много раз в цикле и все лишние телодвижения с ними замедляют программу.
Понял, спасибо :D
4) нет.
А как одна программа узнает, что какое-то место занято памяти занято другой программой?

А может лучше купить/нагуглить книжку по С/С++? Это будет эффективнее вопросов на форуме.
Я прошел тему "Указатели" в учебнике, но там про это не было написано.


Спасибо за ответы!
(Offline)
 
Ответить с цитированием
Старый 23.06.2011, 21:05   #6
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Указатели

[off] > [offtop]
example
(Offline)
 
Ответить с цитированием
Старый 23.06.2011, 21:27   #7
ANDREYman
Нуждающийся
 
Аватар для ANDREYman
 
Регистрация: 17.12.2010
Адрес: Санкт-Петербург
Сообщений: 87
Написано 55 полезных сообщений
(для 214 пользователей)
Ответ: Указатели

Hagrael,
Вероятно это потому, что по умолчанию в С++ адреса в явном виде пишутся в шестнадцатиричной системе. Сделай преобразование типов и будет тебе счастье.

Указатель - это просто адрес записанный в 4 или 8 байт в зависимости от разрядности системы, а чтобы через него работать с тем, что по этому адресу лежит - нужно знать что там лежит, вот за этим ему и нужен тип.

У каждой своя область памяти, за попытку подмять чужую ОС бъёт битой по голове.


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

Последний раз редактировалось ANDREYman, 23.06.2011 в 23:46.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Hagrael (24.06.2011)
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 14:31.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com