forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   C++ (http://forum.boolean.name/forumdisplay.php?f=22)
-   -   Указатели (http://forum.boolean.name/showthread.php?t=14969)

Hagrael 23.06.2011 19:31

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

Вопросы, не касающиеся указателей:
3) Почему глобальные переменные при отсутствии инициализации программистом принимают нулевые значения, а локальные - нет?
4) Может ли произойти конфликт между программами - одна заняла память другой.

SBJoker 23.06.2011 19:34

Ответ: Указатели
 
0x - это шестнадцатеричное число в плюсах

moka 23.06.2011 19:35

Ответ: Указатели
 
2. От типа данных, зависит размер памяти, который будет занимать данное. И чтобы знать сколько нам ваще получать битов данных, хранится и тип указателя. Либо для каждого участка в памяти, нада было хранить заголовок о занимаемой памяти - а это тупизм (расход памяти впустую).

ANDREYman 23.06.2011 19:42

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

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

Hagrael 23.06.2011 20:34

Ответ: Указатели
 
Цитата:

0x - это шестнадцатеричное число в плюсах
Да, но раз операция &a возвращает простое шестнадцатеричное число, то почему компилятор говорит "Cannot convert 'int*' to 'int'."?
Цитата:

2. От типа данных, зависит размер памяти, который будет занимать данное. И чтобы знать сколько нам ваще получать битов данных, хранится и тип указателя. Либо для каждого участка в памяти, нада было хранить заголовок о занимаемой памяти - а это тупизм (расход памяти впустую).
То есть если бы не было типа у указателей, то программа бы не знала, сколько брать байтов и сколько резервировать при операции *p?
Но как так, ведь когда ты пишешь
Код:

int a;
a=5;

то компьютер использует именно 4 байта, а значит, знает, что переменная a имеет тип integer. Как же тогда это организовано?
Код:

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

4) нет.
А как одна программа узнает, что какое-то место занято памяти занято другой программой?

Цитата:

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


Спасибо за ответы!

moka 23.06.2011 21:05

Ответ: Указатели
 
Код:

[off] > [offtop]
example

ANDREYman 23.06.2011 21:27

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

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

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


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


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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot