Форум программистов, компьютерный форум, киберфорум
Наши страницы

C++

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

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

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

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

Необработанное исключение в "0x77913ab3" в "x": 0xC0000005: Нарушение прав доступа при чтении "0xdddddddd" - C++
вот код, нужно найти 3 минимальных положительных числа в массиве. При размере массива больше 950 в конце заполнения рандомным способом...

Кто пойдет на мероприятие "C++ Russia 2016"? - C++
Может кто из присутствующих идет на мероприятие? Я планирую быть.

Найти в строке последовательность символов ("abcd") и заменить ее другой ("xyz") - C++
Найти в строке последовательность символов (&quot;abcd&quot;) и заменить ее другой (&quot;xyz&quot;).

Переделка из делфи - ругается на объявление функции "sizeof "Check" is unknown or zero" - C++ Builder
Сижу перебираю программку с одного языка на другой, выскочила проблема. Я на сях уже ничего давно не делал, забыл все напрочь, но...

строки-. Опpеделить число символов в самом длинном слове стpоки. Слова отделяются знаком "/". - C++ Builder
Опpеделить число символов в самом длинном слове стpоки. Слова отделяются знаком &quot;/&quot;.

Подскажите тему для курсовой работы:"Создание компоненты в С (Builder)" - C++ Builder
Помогите с темой для курсовой работы:&quot;Создание компоненты в С (Builder)&quot; Нужен курсовой, или хотя бы тема для него. К примеру, создание...

7
CheshireCat
Эксперт С++
2895 / 1244 / 78
Регистрация: 27.05.2008
Сообщений: 3,397
27.12.2009, 21:54 #2
Ни по какому. Низачем.

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

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

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

Я просто придерживаюсь логике если выделяется адрес значит есть смысл, иначе зачем тогда это делать, если оно бессмысленно =))
Да и "дешевле" нуль присвоить и как писал уже выше это приведет к меньшему числу ошибочных ситуаций.
0
Delphin_KKC
UNIX-way
710 / 494 / 17
Регистрация: 15.01.2009
Сообщений: 1,721
27.12.2009, 22:44 #6
Дешевле не нуль присваивать, а оставить в оперативке то, что в ней было.
Указатель - это ведь переменная и под ней выделяется 4 байта (по крайней мере в Вин32 системах). Вот что в этих 4х байтах есть - на такой адрес и будет указывать указатель сразу после создания.
0
CheshireCat
Эксперт С++
2895 / 1244 / 78
Регистрация: 27.05.2008
Сообщений: 3,397
27.12.2009, 22:49 #7
Цитата Сообщение от List2006 Посмотреть сообщение
Уточню что при объявлении присваивается адрес (до оператора new).
....
PS
Тупо берет рандомный пустой адрес это накладное увлечение, проще нулевой присвоить, поэтому должна быть логика.
Еще раз: ДО выполнения оператора new переменной-указателю не присвоен никакой адрес, переменная содержит мусор, который "выглядит" как адрес.
Нулевой адрес присвоить - не проще. В C++ действует принцип, заложенный еще разработчиком языка Б.Страуструпом: "вы не платите за то, чем не пользуетесь". То есть, если мне не нужен нулевой (а точнее, NULL) адрес в этом указателе - компилятор не сделает ни малейшей попытки его туда занести.
0
List2006
24 / 16 / 2
Регистрация: 19.12.2009
Сообщений: 366
27.12.2009, 23:04  [ТС] #8
не присвоен никакой адрес, переменная содержит мусор, который "выглядит" как адрес.
CheshireCat ок спб, теперь ясно. Вначале просто я подумал что ты писал о *p_int, а не о p_int.

Добавлено через 6 минут
Да так и есть, не знаю почему сам не догадался (запутал меня cout со своим автоопределением типов)
0
27.12.2009, 23:04
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.12.2009, 23:04
Привет! Вот еще темы с ответами:

MessageBox - чтобы вместо "Yes" и "No" показывало "Да" и "Нет" - C++ Builder
Доброе время суток, как переделать int Key= Application-&gt;MessageBox(L&quot;Text&quot;, L&quot;Caption&quot;, MB_YESNO|MB_ICONQUESTION|MB_DEFBUTTON2); чтоб...

Открыть папку "мой компьютер", "панель управления", "program files" - C++ Builder
Нужно открыть папку &quot;мой компьютер&quot;, &quot;панель управления&quot;, &quot;program files&quot;

Ищу исходник игры на С++, на подобие "Солитер", "Быки и коровы", "Змейка" и т. д - C++ Builder
Нужен код игры на С++, на подобие &quot;Солитер&quot;, &quot;Быки и коровы&quot;, &quot;Змейка&quot; и т. д. Или ссылки на исходники, не смогла их...

Для тех, кто любит "посложнее". - Turbo Pascal
Нужна помощь в решении следующих задач: Задача №1: Решить с при помощи &quot;сложных циклов&quot;, без &quot;массивов&quot;. ...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

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