LINUX.ORG.RU

Я тут узнал


0

0

И ужаснулся.

Всё началось со swap. ... с = line[i]; line[i] = line[i++]; line[i++] = c; ... У меня обмен не получился. А всё потому, что i он (не как в С++,pascal и.т.д.) прибавляется в номере элемента массива. Это вообще поравимо?


Если ты про i++, то ведь это: i = i + 1;

а line[i++], можно понять как i = i + 1; line[i];

Но так не всегда, зависит от компилятора, реализции.

tetSU
()

> line[i] = line[i++];

Марш читать учебник по Си про префиксные и постфиксные операторы.

anonymous_incognito ★★★★★
()

Извиняюсь, кому посоветовал читать про операторы, протормозил.

На самом деле, стандартом не определено какое значение i будет использовано в выражении. То есть, для line[i] = line[i++]; в правой части будет использовано значение до инкремента, а в левой -- может быть как до, так и после.

То же самое и в выражении вроде M=a[i++]+b[i]; -- известно только, что для a[i++] будет старое выражение, а b[i] не определено.

anonymous_incognito ★★★★★
()

Ну и зачем так извращаться?

с = line[i];

line[i] = line[i + 1];

line[++i] = c;

И все.

shumer
()

аффтар выпей йаду, Си не для тебя

anonymous
()
Ответ на: комментарий от anonymous_incognito

Подводя итоги, Undefined Behaviour. Модификация и доступ к переменной не разделены точкой следования.

WFrag ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.