Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
Axel1988
0 / 0 / 0
Регистрация: 28.01.2014
Сообщений: 51
1

Конструкция *(*) - зачем звездочка перед скобками?

29.01.2014, 12:15. Просмотров 2438. Ответов 4
Метки нет (Все метки)

#define WDKEY *(volatile unsigned int*)0x7025


Ребят скажите правильно я понял эту конструкцию:
0x7025 константа

(volatile unsigned int*) — операция приведения типа: константа преобразуется к типу «указатель на volatile unsigned int»

WDKEY подразумевает *(volatile unsigned int*)0x7025


Вот только я не понимаю конструкцию *(*) зачем звездочка перед скобками?
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.01.2014, 12:15
Ответы с готовыми решениями:

Конструкция с фигурными скобками
Есть код на неопознанном языке (сиподобный) (в разделе плюсов больше умных людей, поэтому решил...

Зачем такая конструкция с new?
Добрый день! Учу с#, был опыт с с++, и щас наткнулся на отличие с объявлением, например класса. ...

Зачем нужна конструкция else if
Для чего используется конструкция else if. В чем различие между просто if

Зачем в Прологе используется "звездочка"?
Идет вот такая запись: class writeln predicates list : (integer*) determ. end class ...

Зачем нужна конструкция ElseIf и как ей пользоваться?
Помогите разобрать код.И что такое ElseIf и как им пользоваться? Dim a as integer=0 If 3 >...

4
Fonduee
Музыка нас Связала
231 / 231 / 52
Регистрация: 26.03.2008
Сообщений: 616
29.01.2014, 14:09 2
Это операция "разыменования" (дереференцирование) поинтера. Пример:

Функции был передан параметер (void *) "Неопределенный поинтер", но вы то знаете, что эта переменная имеет следущий тип данных -> "volatile unsigned int", и хотите с ним работать.

Для начала нужно перекастовать из поинтера типа (void *) в поинтер типа (volatile unsigned int *). Ну а затем, чтобы работать со значением адреса, на который ссылается поинтер, нужно этот поинтер "разыменовать", путём добавления звёздочки: * (volatile unsigned int *).

C
1
2
3
4
int x = 10;
void *ptrVoid = (void *) &x; ?? // 0x"Адрес в памяти"
int *ptrInteger = (int *) ptrVoid; // 0x"Адрес в памяти", как у *ptrVoid
int y = *ptrInteger; // y = 10
1
Axel1988
0 / 0 / 0
Регистрация: 28.01.2014
Сообщений: 51
29.01.2014, 14:51  [ТС] 3
Скажите а где в примере си разыменование("поинтер "разыменовать", путём добавления звёздочки: * (volatile unsigned int *")?) я немного не понял( может тогда так int *ptrInteger = *(int *) ptrVoid; ?
0
Fonduee
Музыка нас Связала
231 / 231 / 52
Регистрация: 26.03.2008
Сообщений: 616
29.01.2014, 16:15 4
Лучший ответ Сообщение было отмечено Axel1988 как решение

Решение

В примере ваш случай был разложен на два шага (3-4), но всё вместе выглядит как:
C
1
int y = *(int *) ptrVoid;
т.е. сначала перекастовываем в числовой поинтер (int *), а затем дереференцируем "числовой поинтер" в само число.
1
Axel1988
0 / 0 / 0
Регистрация: 28.01.2014
Сообщений: 51
29.01.2014, 16:26  [ТС] 5
Спасибо огромное, Вам!!!!!!! Все встало на свои места!!!
0
29.01.2014, 16:26
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.01.2014, 16:26

Выражение перед скобками вероятного вызова должно иметь тип функции (pointer-to-)
void paint(HDC hdc, HWND hwnd, int m1, int n1, int k1) { HBRUSH hBrush =...

Выражение перед скобками вероятного вызова должно иметь тип функции (pointer-to-)
Здравствуйте! Постоянно возникает ошибка "Выражение перед скобками вероятного вызова должно иметь...

Ошибка: Выражение перед скобками вероятного вызова должно иметь тип функции (pointer-to-)
Выдаёт ошибку Выражение перед скобками вероятного вызова должно иметь тип функции (pointer-to-)...


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

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

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