Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Приведения char* к struct* + взятие члена, одним выражением 
V
    Опции темы
Fedor
Дата 25.7.2006, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Днепрянин
****


Профиль
Группа: Участник
Сообщений: 2090
Регистрация: 8.2.2003
Где: Великий

Репутация: нет
Всего: 32



в общем, сабж.
Язык C
Есть переменная типа char*
Мы ее приводим к указателю на некую структуру. 
И  в этом же выражении нужно сразу взять член структуры.
Возможно ли это?

И если да, то как? 


--------------------
Мы - Днепряне. Мы всех сильней.
PM ICQ   Вверх
Akeem
Дата 25.7.2006, 21:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 14.7.2006
Где: Киев/Украина

Репутация: нет
Всего: 3



конечно я не вижу тут проблемы.

Код

struct Str
{
int x;
};

char * name;

Str name2;

name=(char *)name2.x;

 


--------------------
Мир огромен и мы только муравьи в нём! (С) formicha

PM MAIL WWW ICQ   Вверх
Fedor
Дата 25.7.2006, 21:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Днепрянин
****


Профиль
Группа: Участник
Сообщений: 2090
Регистрация: 8.2.2003
Где: Великий

Репутация: нет
Всего: 32



Akeem, ;)
мне наоборот надо - из char* к указателю на структуру 

Это сообщение отредактировал(а) Fedor - 25.7.2006, 21:13


--------------------
Мы - Днепряне. Мы всех сильней.
PM ICQ   Вверх
Damarus
Дата 25.7.2006, 21:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 671
Регистрация: 6.5.2006

Репутация: 6
Всего: 29



Так, что ли:

Код

struct XXX
{
    int v1;
    int v2;
};

int wmain(int argc, wchar_t *argv[], wchar_t *envp[])
{
    struct XXX s;
    struct XXX* ps;
    char* p;
    int vx;

    s.v1 = 1;
    s.v2 = 2;
    p = (char*)&s;

    vx = (ps = (struct XXX*)p)->v1; // <<<<<<<<<<<<<
    vx = ps->v2;
}

 
PM MAIL ICQ Jabber   Вверх
Fedor
Дата 25.7.2006, 21:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Днепрянин
****


Профиль
Группа: Участник
Сообщений: 2090
Регистрация: 8.2.2003
Где: Великий

Репутация: нет
Всего: 32



Damarus, похоже на то. Благодарю.

З.Ы. Хотя буду вообще счастлив и прыгать до потолка, если есть способ, в котором не будет переприсваивания ps = ...

Добавлено @ 21:25 
Хм. Странно. У меня на одном компиляторе компилится и без этого присваивания, а на другом вроде нет... smile Ладно. Буду смотреть. Может, это я тупой... 


--------------------
Мы - Днепряне. Мы всех сильней.
PM ICQ   Вверх
Damarus
Дата 27.7.2006, 21:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 671
Регистрация: 6.5.2006

Репутация: 6
Всего: 29



Цитата(Fedor @  25.7.2006,  22:21 Найти цитируемый пост)
З.Ы. Хотя буду вообще счастлив и прыгать до потолка, если есть способ, в котором не будет переприсваивания ps = ...

Как я понял ps не нужен вообще? Тогда так:
Код

//................
    vx = ((struct XXX*)p)->v1; // <<<<<<<<<<<<<
    //vx = ps->v2
//................

У меня на VS2005 работает.
  

Это сообщение отредактировал(а) Damarus - 27.7.2006, 21:04
PM MAIL ICQ Jabber   Вверх
powerfox
Дата 27.7.2006, 21:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I wanna fork()
****


Профиль
Группа: Комодератор
Сообщений: 3990
Регистрация: 1.10.2005
Где: Санкт-Петербург

Репутация: 2
Всего: 97



Цитата(Fedor @  25.7.2006,  21:49 Найти цитируемый пост)
в общем, сабж.Язык CЕсть переменная типа char*Мы ее приводим к указателю на некую структуру. И  в этом же выражении нужно сразу взять член структуры.Возможно ли это?

Не могу понять, зачем? 


--------------------
user posted image
PM WWW   Вверх
np9mi7
Дата 27.7.2006, 21:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 553
Регистрация: 17.8.2003
Где: Volgograd, Russia

Репутация: 5
Всего: 10



Цитата
Не могу понять, зачем? 
, буфер и пакет достается из него (уверен почти на 100 %). Кто программирует на С такой медот любят; 


--------------------
"Я точно знаю то, что ничего не знаю..." Сократ.
evolution project
PM MAIL WWW ICQ MSN   Вверх
ynter
Дата 29.7.2006, 21:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 27.6.2006

Репутация: нет
Всего: нет



Цитата(Fedor @  25.7.2006,  21:21 Найти цитируемый пост)
Хм. Странно. У меня на одном компиляторе компилится и без этого присваивания, а на другом вроде нет... smile Ладно. Буду смотреть. Может, это я тупой...  


Может ты имел в виду что-то вроде этого:

Код

struct Str
{
int x;
};

char * name;
Str str;
Str *pstr = &str;

pstr=(Str *)name; // <<<<<<<<<<<<

 
PM MAIL   Вверх
Fedor
Дата 31.7.2006, 20:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Днепрянин
****


Профиль
Группа: Участник
Сообщений: 2090
Регистрация: 8.2.2003
Где: Великий

Репутация: нет
Всего: 32



Ребят, все работает, спасибо. Это я тупой smile. Код написал правильный, только сделал небольшую "орфографическую" ошибку, а потом не сильно вчитался в сообщение компилятора. 


--------------------
Мы - Днепряне. Мы всех сильней.
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0733 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.