Форум программистов, компьютерный форум CyberForum.ru

C++

Войти
Регистрация
Восстановить пароль
 
List2006
24 / 16 / 2
Регистрация: 19.12.2009
Сообщений: 366
#1

Объявление укзателей, логика работы (для тех кто знаком с языком "низко"). - C++

27.12.2009, 21:07. Просмотров 510. Ответов 7
Метки нет (Все метки)

C++
1
2
3
4
5
6
    int *p_int;
    cout << p_int << "\n";
    p_int = new int;
    cout << p_int;
 
//в обоих выводах будут разные адреса памяти.
По какому алгоритму(на основе чего именно этот адрес) и зачем(если присваивается значит нужен для чего-то, или был нужен когда-то, потому что проще нулевой адрес присвоить - меньше ошибок будет) присваивается указателю адрес во время объявления??
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.12.2009, 21:07     Объявление укзателей, логика работы (для тех кто знаком с языком "низко").
Посмотрите здесь:

В тех словах, которые окончиваются сочетанием букв "ть", заменить его окончание на "ил" C++
C++ Builder строки-. Опpеделить число символов в самом длинном слове стpоки. Слова отделяются знаком "/".
C++ Ввести класс для работы с объектом "многочлен"
C++ Ввести класс для работы с объектом "рациональная дробь"
Удалить из файла все строки кроме тех что начинаются на словосочетание "Данные для" C++
C++ Проверить, является ли третье слово в массиве знаком "="
C++ Создать класс Date для работы с датами в формате "год.месяц.день" / C++ для начинающих
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CheshireCat
Эксперт С++
2890 / 1239 / 78
Регистрация: 27.05.2008
Сообщений: 3,327
27.12.2009, 21:54     Объявление укзателей, логика работы (для тех кто знаком с языком "низко"). #2
Ни по какому. Низачем.

Во время объявления никакое значение переменной-указателю не присваивается, просто резервируется память для хранения этой переменной (естественно, размер этой памяти == размеру указателя). Поэтому сразу после объявления (в твоем коде - в строке 3) "значением" указателя p_int будет битовое представление того содержимого, которое лежало в этих же ячейках памяти до того, как эти ячейки памяти были отведены для хранения указателя.
List2006
24 / 16 / 2
Регистрация: 19.12.2009
Сообщений: 366
27.12.2009, 22:10  [ТС]     Объявление укзателей, логика работы (для тех кто знаком с языком "низко"). #3
Я понимаю что получу "битовое представление того содержимого, которое лежало в этих же ячейках памяти до того"
Но по какому принципу присваивается адрес тот? Уточню что при объявлении присваивается адрес (до оператора new). Вопрос не раскрыт.

Понимаю что это "трах-мозга" но мне интересно знать логику работы.

PS
Тупо берет рандомный пустой адрес это накладное увлечение, проще нулевой присвоить, поэтому должна быть логика.
Gravity
557 / 551 / 39
Регистрация: 29.01.2009
Сообщений: 1,274
27.12.2009, 22:16     Объявление укзателей, логика работы (для тех кто знаком с языком "низко"). #4
Цитата Сообщение от List2006 Посмотреть сообщение
Но по какому принципу присваивается адрес тот?
Где компилятор расположит переменную в стэке, тот адрес ячейки она и получит. За подробностями стОит разве что изучить исходники самого компилятора.
List2006
24 / 16 / 2
Регистрация: 19.12.2009
Сообщений: 366
27.12.2009, 22:41  [ТС]     Объявление укзателей, логика работы (для тех кто знаком с языком "низко"). #5
Цитата Сообщение от Gravity Посмотреть сообщение
Где компилятор расположит переменную в стэке, тот адрес ячейки она и получит. За подробностями стОит разве что изучить исходники самого компилятора.
Опытным путем проверял что, адрес это не адрес самого указателя. И сам адрес не постоянен. То есть, есть какой-то алгоритм выделения.
тестил на gcc 4.1.2 (linux Centos)

Я просто придерживаюсь логике если выделяется адрес значит есть смысл, иначе зачем тогда это делать, если оно бессмысленно =))
Да и "дешевле" нуль присвоить и как писал уже выше это приведет к меньшему числу ошибочных ситуаций.
Delphin_KKC
UNIX-way
709 / 494 / 17
Регистрация: 15.01.2009
Сообщений: 1,721
27.12.2009, 22:44     Объявление укзателей, логика работы (для тех кто знаком с языком "низко"). #6
Дешевле не нуль присваивать, а оставить в оперативке то, что в ней было.
Указатель - это ведь переменная и под ней выделяется 4 байта (по крайней мере в Вин32 системах). Вот что в этих 4х байтах есть - на такой адрес и будет указывать указатель сразу после создания.
CheshireCat
Эксперт С++
2890 / 1239 / 78
Регистрация: 27.05.2008
Сообщений: 3,327
27.12.2009, 22:49     Объявление укзателей, логика работы (для тех кто знаком с языком "низко"). #7
Цитата Сообщение от List2006 Посмотреть сообщение
Уточню что при объявлении присваивается адрес (до оператора new).
....
PS
Тупо берет рандомный пустой адрес это накладное увлечение, проще нулевой присвоить, поэтому должна быть логика.
Еще раз: ДО выполнения оператора new переменной-указателю не присвоен никакой адрес, переменная содержит мусор, который "выглядит" как адрес.
Нулевой адрес присвоить - не проще. В C++ действует принцип, заложенный еще разработчиком языка Б.Страуструпом: "вы не платите за то, чем не пользуетесь". То есть, если мне не нужен нулевой (а точнее, NULL) адрес в этом указателе - компилятор не сделает ни малейшей попытки его туда занести.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.12.2009, 23:04     Объявление укзателей, логика работы (для тех кто знаком с языком "низко").
Еще ссылки по теме:

Создание меню в консоли для работы с классом "Дробь" C++
C++ Класс для работы с объектом "рациональная дробь"
C++ Класс "строка" для работы со строками произвольной длины
C++ Разработать класс "Строка" и реализировать операции для работы подстроками
C++ Класс "одномерный массив" и методы для работы с его данными

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

Или воспользуйтесь поиском по форуму:
List2006
24 / 16 / 2
Регистрация: 19.12.2009
Сообщений: 366
27.12.2009, 23:04  [ТС]     Объявление укзателей, логика работы (для тех кто знаком с языком "низко"). #8
не присвоен никакой адрес, переменная содержит мусор, который "выглядит" как адрес.
CheshireCat ок спб, теперь ясно. Вначале просто я подумал что ты писал о *p_int, а не о p_int.

Добавлено через 6 минут
Да так и есть, не знаю почему сам не догадался (запутал меня cout со своим автоопределением типов)
Yandex
Объявления
27.12.2009, 23:04     Объявление укзателей, логика работы (для тех кто знаком с языком "низко").
Ответ Создать тему
Опции темы

Текущее время: 05:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru