Форум программистов, компьютерный форум CyberForum.ru

Ошибка в преобразовании типов - C++

Восстановить пароль Регистрация
 
Guyver
0 / 0 / 0
Регистрация: 09.11.2013
Сообщений: 19
04.12.2013, 10:58     Ошибка в преобразовании типов #1
Здравствуйте. Я написал программу, которая преобразует int в char через указатель. Программа работает, но криво. Например при вводе числа 222 выводит отрицательное значение, а так быть не должно. Помогите найти ошибку, заранее спасибо )
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <stdio.h>
using namespace std;
 
int main()
{
    int i, *p;
    cout<<"i="; cin>>i;
    p=&i;
    printf("%d\n", *((char*)p));
    system("pause");
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
04.12.2013, 11:03     Ошибка в преобразовании типов #2
Приведение указателей - не есть преобразование типов.
Guyver
0 / 0 / 0
Регистрация: 09.11.2013
Сообщений: 19
04.12.2013, 11:06  [ТС]     Ошибка в преобразовании типов #3
Возможно я не правильно выразился, мне нужно "Преобразовать указатель одного типа в указатель другого". В данном случае указатель типа int в char. )
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
04.12.2013, 11:16     Ошибка в преобразовании типов #4
int выводится как char:
C++
1
2
3
4
int i, *p;
cout<<"i="; cin>>i;
p=&i;
printf("%c\n", *p);
Добавлено через 9 минут
Цитата Сообщение от Guyver Посмотреть сообщение
а так быть не должно
Если char знаковый, то должно.
Guyver
0 / 0 / 0
Регистрация: 09.11.2013
Сообщений: 19
04.12.2013, 11:18  [ТС]     Ошибка в преобразовании типов #5
Все равно не понимаю, задание "Преобразовать указатель одного типа в указатель другого", преподаватель зачел первый раз этот код, сказал все правильно. Потом при защите я случайно набрал значение 222, и у меня вывело отрицательное число, тогда преподаватель сказал что отрицательное число не должно получиться, значит у меня код неправильный)
castaway
Эксперт С++
4846 / 2985 / 368
Регистрация: 10.11.2010
Сообщений: 11,026
Записей в блоге: 10
Завершенные тесты: 1
04.12.2013, 11:22     Ошибка в преобразовании типов #6
unsigned char
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
04.12.2013, 11:28     Ошибка в преобразовании типов #7
Преобразовывается очень просто, просто приводится. А то что выводит отрицательрое число, при int больше 127, то зависит от реализации char (может быть знаковым, может беззнаковым). Если char знаковый, то, если введено 222 (11011110), указатель будет указывать на старший байт, старший бит - знак, поэтому выводится отрицательное число. Если хотите, чтобы выводило только положительные, то приводите к unsigned char*.
Guyver
0 / 0 / 0
Регистрация: 09.11.2013
Сообщений: 19
04.12.2013, 11:29  [ТС]     Ошибка в преобразовании типов #8
Всем большое спасибо, наконец-то понял, что к чему )
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
04.12.2013, 11:42     Ошибка в преобразовании типов #9
Цитата Сообщение от alsav22 Посмотреть сообщение
указатель будет указывать на старший байт
На младший байт int (в памяти он будет первым, архитектура x86).
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.12.2013, 11:46     Ошибка в преобразовании типов
Еще ссылки по теме:

C++ о преобразовании типов C++
Ошибка Error LNK1123: сбой при преобразовании в COFF: файл недопустим или поврежден C++
Ошибка с комплексными числами при дискретном преобразовании Фурье C++

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

Или воспользуйтесь поиском по форуму:
CheshireCat
Эксперт С++
2907 / 1235 / 78
Регистрация: 27.05.2008
Сообщений: 3,308
04.12.2013, 11:46     Ошибка в преобразовании типов #10
Цитата Сообщение от Guyver Посмотреть сообщение
Потом при защите я случайно набрал значение 222, и у меня вывело отрицательное число, тогда преподаватель сказал что отрицательное число не должно получиться, значит у меня код неправильный
Преподаватель такой преподаватель :-) Про signed char и unsigned char никогда ничего не слышал.
Yandex
Объявления
04.12.2013, 11:46     Ошибка в преобразовании типов
Ответ Создать тему
Опции темы

Текущее время: 09:32. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru