Если я запустил следующий код, graph[0][0]
получает 1
, а graph[0][1]
получает 4
.Странное поведение от простой программы С
Другими словами, линия graph[0][++graph[0][0]] = 4;
ставит 1
в graph[0][0]
и 4
в graph[0][1]
.
Я был бы очень признателен, если кто-нибудь может предложить разумные объяснения.
Я наблюдал это с Visual C++ 2015, а также с компилятором Android C (CppDriod).
static int graph[10][10];
void main(void)
{
graph[0][++graph[0][0]] = 4;
}
Прочитайте [undefined behavior] (https://en.wikipedia.org/wiki/Undefined_behavior) и избегайте писать такой нечитаемый код. –
@BasileStarynkevitch Сэр это действительно UB? Разве мы не работаем на разных элементах? –
@BasileStarynkevitch. Этот выглядит корректно, потому что он использует pre-increment. Если бы это был 'graph [0] [graph [0] [0] ++] = 4', это был бы UB. Аналогично, сохранение '-1' в' graph [0] [0] 'приведет к UB с предварительным приращением. – dasblinkenlight