эквивалентное выражение для [j ++] = ++ i без использования операторов приращения до или после - PullRequest
1 голос
/ 23 февраля 2011

Так что я обдумываю этот вопрос (это проблема с домашним заданием / экзаменом):

Запишите эквивалентное выражение для a[j++] = ++i; без использования операторов приращения до / после. Если такое выражение не приводится, объясните, почему.

Мне удалось придумать следующее:

a[j] = i+=1;<br> j+=1;

Я не могу придумать способ увеличения j в пределах [] как пост-инкремента, кроме использования j+=1; впоследствии, которое, как я считаю, привело бы к ответу, что такое выражение не может быть предоставлено (потому что его две строки код вместо одного) и просто объясните, что вы не можете опубликовать приращение без оператора приращения.

Я что-то упустил или я прав? Я просто хотел перепроверить. Заранее спасибо.

РЕДАКТИРОВАТЬ: Благодаря @ Джеймс МакНеллис он предоставил способ, используя a[(j+=1)-1] = (i+=1);

Ответы [ 4 ]

11 голосов
/ 23 февраля 2011

Это ужасно и безобразно, но все равно вот так:

a[(j += 1) - 1] = (i += 1);
2 голосов
/ 23 февраля 2011

Если вы знаете, что i не обернется до нуля, вам на ум приходит одно решение:

(a[j] = i += 1) && (j += 1);
0 голосов
/ 23 февраля 2011

Эквивалентные выражения, которые даже не используют + = являются

(a[j] = i = i + 1, j = j + 1, a[j-1])

и

(i = i + 1, j = j + 1, a[j-1] = i)
0 голосов
/ 23 февраля 2011

Считает ли запятая оператор?

a[j] = i + 1, j += 1, i += 1;

Это как три отдельные строки кода ... но технически одна. (я знаю, что второй i + = 1 не нужен, но я написал его для согласованности.)

...