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
имеет значение левого операнда после присваивания.
Я думаю, что вы на самом деле правы, это означает:
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
,