C, операторы

Модератор: Модераторы разделов

BratSinot
Сообщения: 812
ОС: Slackware64

C, операторы

Сообщение BratSinot »

Доброго времени суток!

Что есть в C операторы: "?", " :"? Я в каком-то справочнике их видел, но не могу найти в каком. Просто GCC, и его производные нормально с ним работают, а Visual Studio собирает, но при запуске умирает на этом месте:

Код: Выделить всё

 for (j=0; j<height;j++)
 for (i=0; i<width; i++)
 expanded_data[2*(i+j*width)]=expanded_data[2*(i+j*width)+1]=(i>=bitmap.width||j>=bitmap.rows)?0:bitmap.buffer[i+bitmap.width*j];
Спасибо сказали:
hippi90
Сообщения: 83
ОС: Debian testing

Re: C, операторы

Сообщение hippi90 »

Сокращенная запись оператора if ... else ...
if (value) command1 else command2; Эквивалентно value ? command1 : command2
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5409
ОС: Gentoo

Re: C, операторы

Сообщение /dev/random »

hippi90 писал(а):
25.02.2011 20:36
Сокращенная запись оператора if ... else ...
if (value) command1 else command2; Эквивалентно value ? command1 : command2

Близко, но неправильно.
Это аналог if...else для выражений.
В expr1?expr2:expr3 если expr1 - истина, то вычисляется и возвращается значение expr2, иначе - expr3. Эти expr'ы - просто выражения, но зато и вся конструкция является выражением, допуская, например, такую запись: a=func(b?c:d). С if'ом такое не прокатит.
А вообще, это описано в любом учебнике по C.
Спасибо сказали:
hippi90
Сообщения: 83
ОС: Debian testing

Re: C, операторы

Сообщение hippi90 »

/dev/random писал(а):
25.02.2011 20:51
Близко, но неправильно.
Это аналог if...else для выражений.
В expr1?expr2:expr3 если expr1 - истина, то вычисляется и возвращается значение expr2, иначе - expr3. Эти expr'ы - просто выражения, но зато и вся конструкция является выражением, допуская, например, такую запись: a=func(b?c:d). С if'ом такое не прокатит.
А вообще, это описано в любом учебнике по C.


Да, это я и хотел сказать, спасибо, что поправили.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: C, операторы

Сообщение drBatty »

hippi90 писал(а):
25.02.2011 20:36
Сокращенная запись оператора if ... else ...

if ... else это конструкция языка.
?: это операция, вроде сложения или там умножения.

Код: Выделить всё

X ? Y : Z;

вычисляется так:
1) сначала вычисляется X
2) если X != 0, тогда вычисляется Y
3) если X == 0, то вычисляется Z
Это операция имеет значение, например

Код: Выделить всё

minimum = ( (x < y) ? x : y );

вычисление минимума из x и y.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
nickm
Сообщения: 203
ОС: RFRemix

Re: C, операторы

Сообщение nickm »

BratSinot писал(а):
25.02.2011 20:29
Что есть в C операторы: "?", " :"? Я в каком-то справочнике их видел, но не могу найти в каком.


http://ru.wikipedia.org/wiki/Тернарная_условная_операция
Спасибо сказали: