С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.81/21: Рейтинг темы: голосов - 21, средняя оценка - 4.81
1 / 1 / 0
Регистрация: 25.04.2015
Сообщений: 41
1

Почему два char нельзя сравнивать так ==?

27.04.2015, 12:33. Показов 4041. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Почему два char нельзя сравнивать так ==?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.04.2015, 12:33
Ответы с готовыми решениями:

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

Нельзя сравнивать два типа (Т1 и Т1), как это исправить?
Вот код public void Search(Т1 a) { for (int i = 0; i < this.size; i++) ...

Почему в TASM нельзя сравнивать память-память?
То есть я понимаю, что можно либо регистр-память, либо память-регистр, либо регистр-регистр. Но...

FindComponent. Почему так нельзя?
Добрый вечер. В зависимости от переменной ind мне надо выбрать ADOQuery1 или ADOQuery2. Что я...

12
Котовчанин
942 / 482 / 200
Регистрация: 16.02.2010
Сообщений: 3,338
Записей в блоге: 37
27.04.2015, 12:34 2
Novichock123, разве?
0
1 / 1 / 4
Регистрация: 27.04.2015
Сообщений: 8
27.04.2015, 12:36 3
Можно сравнивать таким образом
0
0 / 0 / 0
Регистрация: 27.04.2015
Сообщений: 3
27.04.2015, 12:37 4
Прекрасно сравнивается.
C++
1
2
3
4
5
6
7
8
char a;
char b;
 
a = 'a';
b = 'b';
 
if(a == b) printf("True!");
 else printf("False!");
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
27.04.2015, 12:38 5
Цитата Сообщение от Novichock123 Посмотреть сообщение
Почему два char нельзя сравнивать так ==?
Потому что можно.
Но скорее всего речь должна идти о char* (т.е. указателе на символ). При сравнении двух строк, представленных указателями на первый символ и заканчивающихся нулевым символом (так называемые "сишные строки"), нужно использовать функцию типа strcmp(). При сравнении через == будет производиться сравнение АДРЕСОВ первых символов, а не самих строк.

Не по теме:

P.S. При формулировке вопроса советую описывать задачу более полно, т.к. ясновидящих тут нет.

0
Заблокирован
27.04.2015, 12:38 6
C++
1
2
3
4
char a = 'x';
char b = 'y';
if(a == b)
    doSomeThink();
0
Форумчанин
Эксперт CЭксперт С++
8216 / 5046 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
27.04.2015, 12:42 7
Распространенные ошибки
0
Модератор
Эксперт по электронике
8950 / 6716 / 921
Регистрация: 14.02.2011
Сообщений: 23,708
27.04.2015, 12:43 8
Цитата Сообщение от Tulosba Посмотреть сообщение
Но скорее всего речь должна идти о char* (т.е. указателе на символ).
странно но ни у кого не возникает вопрос почему нельзя
C++
1
2
3
int a[10];
int b[10];
if(a==b)
как бы донести что строка это тот же массив, но с 0 в конце
0
1 / 1 / 0
Регистрация: 25.04.2015
Сообщений: 41
27.04.2015, 13:07  [ТС] 9
Я имею в виду массив символов. Вместо == я юзаю strcmp. Но почему нельзя ==? char[10] на подобии string.
C++
1
2
3
4
char a[10];
char b[10];
if(a==b)
{//не сработает}
0
Котовчанин
942 / 482 / 200
Регистрация: 16.02.2010
Сообщений: 3,338
Записей в блоге: 37
27.04.2015, 13:09 10
Лучший ответ Сообщение было отмечено Novichock123 как решение

Решение

Novichock123, потому что strcmp сравнивает строки, чем являются массивы чаров. А так Вы пытаетесь сравнить два указателя на массив.
2
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
27.04.2015, 13:20 11
Цитата Сообщение от ValeryS Посмотреть сообщение
странно но ни у кого не возникает вопрос почему нельзя
Цитата Сообщение от Novichock123 Посмотреть сообщение
Я имею в виду массив символов.
ValeryS, вот потому и не возникает (потому что возникает, но под другим углом)
0
3176 / 1935 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
27.04.2015, 13:24 12
Цитата Сообщение от Novichock123 Посмотреть сообщение
наподобиЕ
Потому, что char - это не строки, а символы и char* тоже не строки, а массивы символов.
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
27.04.2015, 13:29 13
Цитата Сообщение от gazlan Посмотреть сообщение
char* тоже не строки, а массивы символов
Если уж быть точным, то char* - это указатель на символ.
А указывает ли он на элемент массива или си-строки - уже частности, которые могут как выполняться, так и нет.
1
27.04.2015, 13:29
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.04.2015, 13:29
Помогаю со студенческими работами здесь

Почему нельзя сделать так?
И как правильно сделать то, что я хочу сделать?) int num = 7; char ch =...

Почему предел нельзя определить так
Здравствуйте. Почему подобный предел нельзя определить вот так? Вроде же выглядит вполне...

Объясните, почему так нельзя делать?
using namespace std; uint32_t foo(uint32_t c, uint32_t a, const vector< uint32_t> & data) { ...

Почему нельзя так объявить двумерный массив?
Ошибка возникает если для массива tempArray при объявлении(и одновременной инициализации)...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru