1 / 2 / 0
Регистрация: 06.12.2013
Сообщений: 114
|
||||||
1 | ||||||
Обязательно ли объявлять переменную для хранения адреса переменной как указатель?09.05.2014, 09:12. Показов 2921. Ответов 38
Метки нет Все метки)
(
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
|
|
09.05.2014, 09:12 | |
Ответы с готовыми решениями:
38
Как объявлять указатель на массив указателей? Как правильно объявлять указатель на массив указателей? Как правильно объявлять struct переменную? Объясните как в JSP объявлять и вызывать глобальную переменную??? |
3254 / 2056 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|
09.05.2014, 09:25 | 2 |
Как бы указатели для того и есть.
Можно, конечно, и в переменную типа int записать значение адреса, но вот конкретно Вам это зачем?
0
|
:)
![]() 4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|
09.05.2014, 09:36 | 3 |
0x10, далеко не всегда можно запихнуть адрес в int. Взять хотя бы x64: адрес 64 бита, а int скорее всего 32.
WLF, компилятор ругается потому что типы не совместимы. Вы же едите суп ложкой, а не вилкой. Вот и здесь не надо путать сущности.
0
|
3254 / 2056 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|
09.05.2014, 09:58 | 6 |
Пруф: http://ideone.com/kwbHEN
0
|
1 / 2 / 0
Регистрация: 06.12.2013
Сообщений: 114
|
||||||
09.05.2014, 10:16 [ТС] | 9 | |||||
|14|error: invalid conversion from 'int*' to 'int' [-fpermissive]| Может быть он ругается потому, что адрес сохраняется в hex-формате (т.е. с символом 'x')?
0
|
3254 / 2056 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
||||||
09.05.2014, 10:25 | 10 | |||||
Нельзя так просто взять и привести указатель к целому числу. Типы разные.
Грубо говоря:
0
|
:)
![]() 4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|
09.05.2014, 10:31 | 12 |
WLF, почему у Вас вообще возникла мысль, что указатель (а ведь адрес переменной это указатель) может быть так просто преобразован и сохранен в целочисленной переменной?
Hex - это всего лишь способ представления информации для человека. Так что в данном случае Вы сказали глупость.
0
|
1 / 2 / 0
Регистрация: 06.12.2013
Сообщений: 114
|
|
09.05.2014, 10:34 [ТС] | 13 |
Ну так указатель, как я понял, это же обычная переменная в которой хранится адрес. Адрес - это просто число. Так почему я не могу поместить в обычную переменную (пусть даже это будет long int) какое-то число, которое я интерпретирую как адрес.
И вообще, почему вывод происходит в шестнадцатиричном формате, а не в десятичном? Добавлено через 1 минуту А почему нет? (см. выше)
0
|
3254 / 2056 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|
09.05.2014, 10:36 | 14 |
Физически - да.
В языке это разные типы данных. Потому что есть перегрузка operator<< для указателя http://www.cplusplus.com/refer... tor%3C%3C/, где и реализован вывод в hex-формате.
0
|
4201 / 1793 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
||||||
09.05.2014, 10:41 | 15 | |||||
Во-первых откуда тебе известно, что это число туда влезет? Указатель же, объявленный с помощью звёздочки, гарантирует, что такое число туда поместится. Во вторых как инкрементить будешь? Типизированный указатель инкрементится оператором ++ сразу на размер ячейки, на которую указывает, а не к соседнему байту. И при вычитании двух указателей получается количество ячеек, которые межу этими адресами можно поместить. Например,
0
|
:)
![]() 4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|
09.05.2014, 10:42 | 16 |
WLF, адрес это не просто число. Адреса например нельзя складывать в отличии от чисел. Т.к. результат этого действия не несет смысла. В некоторых случаях адрес можно преобразовывать в целое число и обратно, но это не делается автоматически.
Как будет выводится на экран то или иное значение через operator << зависит от типа, который ему будет передан. Целые по умолчанию выводятся в десятичном формате, а адреса в шестнадцатиричном. Задавая манипуляторы типа std::hex std::dec можно менять это поведение.
0
|
4201 / 1793 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
09.05.2014, 10:44 | 17 |
Указатель есть целое специального вида, предназначенное только для хранения номера байта, с которого начинается некоторое данное, или функция. Адрес есть значение номера байта, с которого начинается некоторое данное, или функция. Значение указателя - это адрес, но адрес и указатель - разные сущности, соотносимые также, как число и переменная числового типа: адрес - значение указателя, указатель - данное, хранящее адрес.
1
|
1 / 2 / 0
Регистрация: 06.12.2013
Сообщений: 114
|
|
09.05.2014, 11:08 [ТС] | 18 |
Да так-то понятно, что указатель это тип данных для адреса. Просто меня заинтересовало
cout << "Адрес Variable\t\t = " << dec << &Variable << endl; не работает. namespace задан (листинг в первом сообщении). |2|fatal error: iostream: No such file or directory| Добавлено через 12 минут Пример скомпилился, dec/hex работает, а у меня почему-то нет...
0
|
4201 / 1793 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|||||||||||
09.05.2014, 11:28 | 19 | ||||||||||
Нельзя, даже
1
|
:)
![]() 4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
||||||
09.05.2014, 13:23 | 20 | |||||
Для вывода адреса указателя манипуляторы не действуют. Я не совсем корректно выразился в предыдущем сообщении. Но если нужно вывести адрес в десятичном представлении, можно рассмотреть такой код:
Кстати, если нужно преобразовывать значение указателя в целое и обратно, правильным будет именно использование типов uintptr_t/intptr_t, а не просто int, у которого может не хватить разрядности. типа size_t может не хватить для представления адреса. См. первый комментарий к ответу тут.
1
|
09.05.2014, 13:23 | |
Помогаю со студенческими работами здесь
20
Сохранение адреса переменной пользовательского класса в переменную типа int или double
Составьте описание типа данных для хранения фамилии, имени, отчества, адреса
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |