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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Использование кастов, Запутался с кастами 
V
    Опции темы
Ak47black
  Дата 2.3.2010, 22:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2205
Регистрация: 2.12.2005

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



Здравствуйте.
Помогите пожалуйста сделать следующую конструкцию в C++  smile 
Код

void test(int &i)
{
     i = 1024;
}

int main(int argc, char* argv[])
{
    char* temp = (char *)malloc(5);
   temp[0] = 5;
    test((int&)temp[1]);
    return 0;
}

Хочу получить, что-бы по адресу temp+1 было значение (int)1024, после выполнения test функции.

Добавлено через 1 минуту и 12 секунд
C++ однако гибкий, но с непривычки запутывает  smile 
PM MAIL   Вверх
azesmcar
Дата 2.3.2010, 22:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

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



Цитата(Ak47black @  2.3.2010,  22:10 Найти цитируемый пост)
Хочу получить, что-бы по адресу temp+1 было значение (int)1024, после выполнения test функции.

cast в порядке, проблема не в этом. Ты приводишь к типу int, потом присваиваешь, int занимает 4 байта а char - 1 байт, часть данных теряется. Посмотри под дебагером что происходит, и заметь, число 1024 в 1 байт не помещается smile 

Это сообщение отредактировал(а) azesmcar - 2.3.2010, 22:22
PM   Вверх
Ak47black
Дата 2.3.2010, 22:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2205
Регистрация: 2.12.2005

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



Беда в том, что я тут немогу понять как из
Код

temp[1]

сделать чтобы значение бралось по адресу temp+1  smile 
PM MAIL   Вверх
mes
Дата 2.3.2010, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(Ak47black @  2.3.2010,  21:10 Найти цитируемый пост)
что-бы по адресу temp+1

если сами пишете temp+1 , то чего в коде заменяете адрес на значение smile
 
Цитата(Ak47black @  2.3.2010,  21:10 Найти цитируемый пост)
temp[1]

smile
 как исправить думаю уже догадались smile



--------------------
PM MAIL WWW   Вверх
Ak47black
Дата 2.3.2010, 22:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2205
Регистрация: 2.12.2005

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



Так
Код

test((int&)temp+1);

- не бурёт.

Так
Код

test(temp+1);

тоже не бурёт.

И так тоже не хочет
Код

test((int&)temp+1);

 smile

Добавлено @ 22:40
Цитата

то чего в коде заменяете адрес на значение smile

Незнаю smile
В принципе Вы правы.

Добавлено @ 22:40
А как всётаки быть, если заголовок такой оставить?
Код

void test(int &i)


Добавлено через 3 минуты и 27 секунд
Ради спортивного интереса smile

Это сообщение отредактировал(а) Ak47black - 2.3.2010, 22:41
PM MAIL   Вверх
bsa
Дата 2.3.2010, 22:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



Код
test( *static_cast<int*>(static_cast<void*>(temp+1)) );


PM   Вверх
Ak47black
Дата 2.3.2010, 23:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2205
Регистрация: 2.12.2005

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



Ого  smile 
Понятно, я то тут думал что будет что-то менее громадное.
Спасибо bsa.
PM MAIL   Вверх
mes
Дата 2.3.2010, 23:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(Ak47black @  2.3.2010,  22:24 Найти цитируемый пост)
я то тут думал что будет что-то менее громадное.

в си-стиле будет компактней :
Код

test( *(int*)(temp+1) );



--------------------
PM MAIL WWW   Вверх
Ak47black
Дата 2.3.2010, 23:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2205
Регистрация: 2.12.2005

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



А, и так можно.
А предыдущий вариант в каком был стиле? (что-то тут интересно стало, раньше неслышал)
PM MAIL   Вверх
mes
Дата 2.3.2010, 23:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(Ak47black @  2.3.2010,  22:32 Найти цитируемый пост)
А предыдущий вариант в каком был стиле? (что-то тут интересно стало, раньше неслышал) 

C++



--------------------
PM MAIL WWW   Вверх
Ak47black
Дата 2.3.2010, 23:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2205
Регистрация: 2.12.2005

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



Спасибо вроде разобрался  smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

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


 




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


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

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