С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
 Аватар для cetrael
60 / 5 / 3
Регистрация: 01.10.2011
Сообщений: 93

Приведение типов

15.10.2011, 19:04. Показов 1915. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть код вызова метода:
C++
1
obj.func(char a, char b)
сам метод:
C++
1
2
void func(char a, char b) {
int i = (int)a, int j = (int)b;
В итоге при вызове
C++
1
func('1','2')
i = 50, j = 49
Почему?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.10.2011, 19:04
Ответы с готовыми решениями:

Приведение типов
Как компилятор заставить адекватней приводить типы? (VS2012) Например: int a=-1; unsigned int b=5; if(a>b){...}//Условие...

Приведение типов
Всем привет) Есть массив int a = {2 ,4 ,5 ,6 ,256} Числа располагаются по байтам в памяти так: 1б 2б 3б 4б 2 0 0 0 4 ...

Приведение типов
Необходимо привязать адрес массива double по указателю к адресу структуры. Массив сам создан в другом приложении. Если использовать...

12
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
15.10.2011, 19:08
переменная типа char 49 обозначает символ '1', переменная типа char 50 обозначает символ '2'
0
 Аватар для cetrael
60 / 5 / 3
Регистрация: 01.10.2011
Сообщений: 93
15.10.2011, 19:15  [ТС]
Цитата Сообщение от kravam Посмотреть сообщение
переменная типа char 49 обозначает символ '1', переменная типа char 50 обозначает символ '2'
Ну я понял, но мне нужно было достичь того, чтобы char '1' преобразовалось в int 1;
0
186 / 186 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
15.10.2011, 19:16
Для этого есть функция atoi( char * )
C++
1
2
void func(char a, char b) {
int i = atoi( &a), int j = atoi( &b);
Не забудь подключить <string>
0
Android Programmer
141 / 142 / 10
Регистрация: 08.12.2010
Сообщений: 421
15.10.2011, 19:17
для этого есть функция atoi
0
 Аватар для cetrael
60 / 5 / 3
Регистрация: 01.10.2011
Сообщений: 93
15.10.2011, 19:18  [ТС]
Поясните тогда, почему не логичен мой выбор касательно приведения типов?

Добавлено через 53 секунды
Функция atoi преобразует строку ascii символов, а один чаровский символ брать не хочет.
0
Android Programmer
141 / 142 / 10
Регистрация: 08.12.2010
Сообщений: 421
15.10.2011, 19:18
Цитата Сообщение от cetrael Посмотреть сообщение
Поясните тогда, почему не логичен мой выбор касательно приведения типов?
потому что char, это тоже по сути целочисленный тип данных.
и привидение к int, возвращает код символа согласно кодировке.
0
186 / 186 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
15.10.2011, 19:21
Цитата Сообщение от cetrael Посмотреть сообщение
Поясните тогда, почему не логичен мой выбор касательно приведения типов?
тип char - это тот же int
Т.е. в char, как и в int хранятся целые числа
'1'(тип char ) имеет код 49, т.е. в вашем случае происходит преобразование числа 49(типа char) в 49 (типа int).

Цитата Сообщение от cetrael Посмотреть сообщение
Функция atoi преобразует строку ascii символов, а один чаровский символ брать не хочет.
Для этого надо брать адрес объекта как я показал выше.
0
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
15.10.2011, 19:22
Цитата Сообщение от cetrael Посмотреть сообщение
Поясните тогда, почему не логичен мой выбор касательно приведения типов?
Си-подобный кастинг просто создает новую переменную с другим размером и побитово копирует значение оригинальной, пока хватает места. И никоим образом не преобразовывает значение.

Добавлено через 43 секунды
Цитата Сообщение от Chelioss Посмотреть сообщение
Для этого надо брать адрес char как я показал выше.
А нуль терминатор за Вас Страуструп подставлять будет?
0
186 / 186 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
15.10.2011, 19:25
Цитата Сообщение от fasked Посмотреть сообщение
А нуль терминатор за Вас Страуструп подставлять будет?
Вот это я забыл, хотя
пример:
C++
1
2
3
4
5
6
7
8
9
10
#include "iostream"
#include <string>
 
int main()
{
    char a = '4';
    std::cout << atoi( &a );
    system( "pause" );
    return 0;
}
работает без ошибок.

Может кто пояснить почему?
0
 Аватар для cetrael
60 / 5 / 3
Регистрация: 01.10.2011
Сообщений: 93
15.10.2011, 19:27  [ТС]
Цитата Сообщение от fasked Посмотреть сообщение
Си-подобный кастинг просто создает новую переменную с другим размером и побитово копирует значение оригинальной, пока хватает места. И никоим образом не преобразовывает значение.

Добавлено через 43 секунды

А нуль терминатор за Вас Страуструп подставлять будет?
Нуль - терминатор надо было бы подставлять наверное, если бы я преобразовывал строку, а не один символ, нет?
0
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
15.10.2011, 19:28
C++
1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
int main ( ) { 
 
 char a= '1';
 int b= a- 48;
 printf ("b= %d\n", b);
 getchar ();
 
 return 0;
}
привет!
0
Заблокирован
15.10.2011, 20:23
Цитата Сообщение от cetrael Посмотреть сообщение
Есть код вызова метода:
C++
1
obj.func(char a, char b)
сам метод:
C++
1
2
void func(char a, char b) {
int i = (int)a, int j = (int)b;
В итоге при вызове
C++
1
func('1','2')
i = 50, j = 49
Почему?
Вообще-то, ваш код не должен компилироваться, так как у вас стоит запятая в определении целочисленных переменных, и при этом вы указываете спецификатор типа int.

То есть ваш код на самом деле выглядет так, чтобы было понятно

C++
1
int i, int j;
Почему ваш код компилируется?! Скорей всего это ошибка компилятора.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.10.2011, 20:23
Помогаю со студенческими работами здесь

Приведение типов
в GUI ни int str = static_convert&lt;int&gt;(Edit1-&gt;Text) ни int str = (int)Edit1-&gt;Text не приводит : E2034 Cannot convert...

Приведение типов
Как привести наследника ко второму родителю? class Parent1 { public: int a; int b; int c; }; class Parent2

Приведение типов
Доброго времени суток. Данный кусок кода выделяет целую часть. Потом, вычитая из исходного числа целую часть, получаем дробную. Почему...

Приведение типов
В чем различие привидения типа (type)expression, от type(expression)?

Приведение типов
Есть задача создать список с объектами у которых разные классы, но один базовый предок. Потом нужно перебрать список и если объект одного...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru