![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| DigitSphinx |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 442 Регистрация: 28.4.2007 Где: Москва Репутация: 1 Всего: 3 |
Как мне в переменную “x” запихнуть значение double’а которое находится по адресу “aaa” Пытался написать конструкцию наугад не получилось |
|||
|
||||
| Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
|
|||
|
||||
| DigitSphinx |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 442 Регистрация: 28.4.2007 Где: Москва Репутация: 1 Всего: 3 |
Да да я так и написал , наугад но правильно :
но смысла не совсем понял ! получается x указатель это значение указателя на double по адресу aaa вообще логично. Double занимает 8 байт на сколько я знаю , как можно прочитать в переменную типа
все 8 байт по адресу aaa чтобы можно было бы потом вывисти например так
Заранее благодарю. |
||||||
|
|||||||
| Lomir |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 58 Регистрация: 30.1.2007 Где: Lithuania::Kaunas Репутация: 1 Всего: 1 |
2 вопроса непонел... Это сообщение отредактировал(а) Lomir - 23.5.2007, 00:47 |
|||
|
||||
| Hurricane |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 126 Регистрация: 10.4.2007 Репутация: 6 Всего: 9 |
DigitSphinx, какая-то каша в твоих рассуждениях, хотя интуитивно ты вроде как понимаешь.
void* aaa - указатель на тип void. void - неопределенный тип, не имеет размерности. Т.е. в aaa лежит адрес чего-то, тип которого (точнее - размер) неизвестен. (double*)aaa - приводим к указателю на тип double. Т.е. говорим, что по адресу aaa лежат данные (число) типа double. На самом деле это может быть и неправда, но мы так говорим компилятору. Можем сделать так: (int*)aaa - приводим к указателю на тип int. Т.е. говорим, что по адресу aaa лежат данные (число) типа int. Что есть неправда *((double *)aaa) - приводим к указателю на число типа double и берем значение этого числа. Т.е. в данном случае мы _сами_ сказали компилятору, что по адресу aaa лежит число типа double, поэтому компилятор и будет возвращать число типа double (которое занимает предположительно 8 байт). *(int*)aaa - вернет число типа int (предположительно 4 байта), потому что мы говорим компилятору вернуть число типа int (значение по указателю на тип int).
Теперь понятно? Про напечатать - тут я вообще ничего не понял. Это сообщение отредактировал(а) Hurricane - 23.5.2007, 01:03 |
|||
|
||||
| Smarts |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 67 Регистрация: 23.4.2007 Репутация: нет Всего: 2 |
Ты переводишь сам указатель в double*, более правильно так:
Это сообщение отредактировал(а) Smarts - 23.5.2007, 01:06 |
||||
|
|||||
| Hurricane |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 126 Регистрация: 10.4.2007 Репутация: 6 Всего: 9 |
И как же разименовать указатель на тип void? Боюсь, что компилятор этого не умеет. |
||||
|
|||||
| Smarts |
|
||||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 67 Регистрация: 23.4.2007 Репутация: нет Всего: 2 |
Не подумал об этом, тогда так:
|
||||||||
|
|||||||||
| DigitSphinx |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 442 Регистрация: 28.4.2007 Где: Москва Репутация: 1 Всего: 3 |
Всем огромное спасибо
Lomir, На счет второго вопроса (даже не вопрос а мысли в слух !), я имею ввиду что в памяти int на пример занимает 4 смежных байта не учитывая выравнивания по границам (потому что я на знаю что это такое) что то типа
на выходе ничего интересного не дал ! |
|||
|
||||
| Fin |
|
|||
![]() Дракон->Спать(); ![]() ![]() Профиль Группа: Участник Сообщений: 687 Регистрация: 4.1.2006 Репутация: 3 Всего: 10 |
А что мешает сделать проше? например так:
-------------------- Пролетал мимо. |
|||
|
||||
| DigitSphinx |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 442 Регистрация: 28.4.2007 Где: Москва Репутация: 1 Всего: 3 |
Fin, Твой код дал 4 нуля ! , а мне было интересно что содержит каждая ячейка !.
Ладно основной вопрос был решен , всем огромное спасибо |
|||
|
||||
| Fin |
|
|||
![]() Дракон->Спать(); ![]() ![]() Профиль Группа: Участник Сообщений: 687 Регистрация: 4.1.2006 Репутация: 3 Всего: 10 |
DigitSphinx, А он и должен был дать 4 нуля. В твоем коде в первой ячейке будет символ с кодом 0. В С/С++ это как правило обозначает конец строки, и естественно у тебя ничего и не будет печатать. Если ты переформатируеш свою строку примерно так,
то у тебя будет выдаваться содержимое ячеек в числовом, а не символьном виде. Теперь разберем мой код. Символ "0" имеет код ASCII 48, поэтому и были выданы 4 нуля. Это сообщение отредактировал(а) Fin - 23.5.2007, 09:32 -------------------- Пролетал мимо. |
|||
|
||||
| DigitSphinx |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 442 Регистрация: 28.4.2007 Где: Москва Репутация: 1 Всего: 3 |
на выходе дало “A A A A” именно то что я хотел увидеть ! Fin тебе респект ! |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |