| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > Конструкция, где идет * и затем сразу & |
| Автор: Robix 3.6.2015, 11:06 | ||
Здравствуйте, ниже код, где Struct01 это структура.
Из вышеописанного кода хотелось бы понимать что означает 1). &pObjData->dwData ; можно ли так написать? 2). (Struct01*)&pObjData->dwData ; что все это означает ? |
| Автор: konshyn 3.6.2015, 12:30 | ||
|
| Автор: rudolfninja 3.6.2015, 12:32 |
| Здравствуйте. Если я правильно помню приоритеты операций, то сначала будет выполнена операция (pObjData->dwData), а затем вы получите адрес этой области памяти с помощью оператора &. (&pObjData->dwData) - вот тут вы получили адрес dwData, а (Struct01*) приводит этот адрес к указателю на Struct01. |
| Автор: feodorv 3.6.2015, 13:24 |
| Кстати, не очень хорошая конструкция. Судя по названию dwData определена как DWORD, а в неё запихивают адрес некой структуры. В 64-х битном окружении возможны большие проблемы. |
| Автор: Robix 3.6.2015, 23:17 |
| Спасибо. Теперь все ясно. |
| Автор: Robix 4.6.2015, 11:08 | ||||
Ктати, хотел уточнить, после
получается, что тип по адресу переменной dwData будет "указатель на структуру Struct01". И получается что одному указателю присваивается другой. Это не тот случай, когда один указатель указывает на другой? Я читал, что если один указатель на другой указывает, то нужно две звездочки ставить, типа так
Или я не так понял? |
| Автор: rudolfninja 4.6.2015, 11:29 |
| Вы не так поняли. Тут не присваивается одному указателю другой указатель. Тут указателю присваивается адрес dwData. Указатель - это просто переменная, в которой хранится какой-то адрес. Две звездочки ставится в случае указателя на указатель. |
| Автор: feodorv 4.6.2015, 12:08 |
Прошу прощения, был невнимателен. |
| Автор: baldina 4.6.2015, 16:45 | ||
указатель хранит адрес переменной, содержащей значение какого-то типа если в переменной хранится адрес, т.е. она сама является указателем, то указатель на неё будет указателем на указатель, т.е. будет хранить адрес переменной, содержащей адрес
|
| Автор: Robix 4.6.2015, 17:18 | ||||
| Спасибо. Только вот что еще интересно: Почему так нельзя написать, где Struct01 без звездочки? Потому-что тип для адреса можно приводить только указатель? 1).
А если так написать с целью сделать тоже самое, это правильно? 2).
|
| Автор: rudolfninja 5.6.2015, 10:51 | ||
Потому что, таким образом, вы пытаетесь привести адрес dwData к типу своей струкутры. То есть, если тут все сработает (что, конечно, не верно)
То на выходе вы получите объект структуры Struct01. А затем вы пытаетесь этот объект привести к типу указателя на этот объект. Чисто теоретически, должно сработать, но не уверен. |
| Автор: baldina 5.6.2015, 16:36 |
нет. приводить можно только приводимые (совместимые) типы |