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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
cetrael
60 / 5 / 3
Регистрация: 01.10.2011
Сообщений: 93
#1

Приведение типов - C++

15.10.2011, 19:04. Просмотров 919. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.10.2011, 19:04
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Приведение типов (C++):

Приведение типов - C++
Есть ли какая-нибудь разница в следующих выражениях: float a = 123.4f и float a = (float)123.4

Приведение типов - C++
Уважаемые программеры, ПОМОГИТЕ!!! Нужно (мне) реализовать шаблонную функцию для приведения типов. Пример: newType_cast<T>(“123”); ...

Приведение типов. - C++
Столкнулся с задачей считывания данных из символьного массива с дальнейшим отбором из всего этого чисел и перезаписи их в массив типа...

Приведение типов - C++
В паскале можно привести типы: type ts = 0..9; chislo = array of ts; Как это сделать на С++?

Приведение типов. - C++
Доброго времени суток! В общем, есть класс Matrix(прямоугольные над полем вещ. чисел). Необходимо реализовать приведение типов Matrix...

Приведение типов - C++
в GUI ни int str = static_convert<int>(Edit1->Text) ни int str = (int)Edit1->Text не приводит : E2034 Cannot convert...

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

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

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

Добавлено через 43 секунды
Цитата Сообщение от Chelioss Посмотреть сообщение
Для этого надо брать адрес char как я показал выше.
А нуль терминатор за Вас Страуструп подставлять будет?
0
Chelioss
180 / 180 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
15.10.2011, 19:25 #10
Цитата Сообщение от 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  [ТС] #11
Цитата Сообщение от fasked Посмотреть сообщение
Си-подобный кастинг просто создает новую переменную с другим размером и побитово копирует значение оригинальной, пока хватает места. И никоим образом не преобразовывает значение.

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

А нуль терминатор за Вас Страуструп подставлять будет?
Нуль - терминатор надо было бы подставлять наверное, если бы я преобразовывал строку, а не один символ, нет?
0
kravam
быдлокодер
1697 / 884 / 45
Регистрация: 04.06.2008
Сообщений: 5,482
15.10.2011, 19:28 #12
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 #13
Цитата Сообщение от 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
15.10.2011, 20:23
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.10.2011, 20:23
Привет! Вот еще темы с ответами:

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

Приведение типов - C++
Доброго времени суток. Пусть имеются две структуры struct Student { string FirstName; string LastName; int year;

Приведение типов? - C++
Подскажите, пожалуйста что происходит. Не понимаю почему такой код работает. .h class Km { private: static const...

приведение типов - C++
Объясните, пожалуйста, почему возникает такая ошибка: error C2666: 'operator *' : 4 overloads have similar conversions ? Из-за того,...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru