C: что означает запись x=y[a=b]?

Я пытаюсь переписать часть кода C от другого автора в Python, и я наткнулся на следующий тип записи:

x = y[a=b];

где y это массив и a а также b целые числа. Сначала я подумал, что это означает что-то вроде этого:

a = b;
x = y[a];

Но, видимо, это не так. Кто-нибудь может сказать мне, что означает это выражение? Простите, если этот вопрос является дубликатом, но очень трудно обобщить этот вопрос в паре ключевых слов с возможностью поиска, и я не смог найти ничего, что отвечало бы на мой вопрос.

Исходник кода я пытаюсь переписать: ссылка

РЕДАКТИРОВАТЬ:

Переписанный на Python код не работает должным образом (застрял в цикле), поэтому я подумал, что неверно истолковал приведенное выше утверждение. Но, как предположили некоторые из вас, это было правильно в первую очередь. Я должен быть чем-то другим тогда...

2 ответа

Решение
x = y[a=b];

а также

a = b;
x = y[a];

эквивалентны. Выражение a=b имеет значение левого операнда после присваивания.

http://msdn.microsoft.com/en-us/library/474dd6e2.aspx

Я думаю, что вы на самом деле правы, это означает:

a = b;
x = y[a];

a = b сам возвращается b после назначения b в a, Следовательно y[a=b] вернусь y[b] но также назначен b в a,

РЕДАКТИРОВАТЬ

в своем комментарии вы говорите: "если a = 1 и b = 3, то он разрешается в y[3] с a = 3 и b = 3".

Это именно то, что делает код выше:

В начале, a равно 1 а также b равно 3,

a = b;

Сейчас a содержит 3 а также b все еще содержит 3,

x = y[a];

Сейчас x было присвоено значение в y[3], a все еще содержит 3 а также b все еще содержит 3,

Другие вопросы по тегам