LINUX.ORG.RU

в догонку про gcc


0

1

Суть такова. Есть два стула код на Си:

int r;
char str[]="fuck";
r = str[1];
r = 1[str];

Понятно, что a разворачивается внутри компилятора в нечто вроде *(a+b), где в скобках работает адресная арифметика и всё о'к. Естественно, работает и более сложная конструкция:

int r;
char *str[]={"fuck", "thou"};
r = str[1][1];
r = 1[str][1];
r = 1[str+1];

Но где это описано? Где описано ограничение на индексы массива? Нигде не нашёл.

★★

на последнюю строчку цомпилятор ругается
«предупреждение: в присваивании указатель преобразуется в целое без приведения типа»

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

и результат не символ 'h', а что-то рандомное

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

точно, на последнюю строчку неправильно срабатывает, там тип будет char**, что неверно, надо вот так:

r = str[1][1];
r = 1[str][1];
r = 1[1[str]];

тогда все три строчки дают одинаковый результат «h»

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

а я ещё знаю std::map, std::list, std::multimap, std::queue и много других страшных слов!

scaldov ★★
() автор топика

Вот в том числе и из-за таких конструкций всякие кулхацкеры и взламывают системы

cvs-255 ★★★★★
()

си не контролирует границы массивов. вы сами написали, во что разворачивается оператор индекса, что тут еще добавить?

//ваш К.О.

marvin_yorke ★★★
()
Ответ на: комментарий от scaldov

А то, что легко можно запутаться и допустить ошибку

cvs-255 ★★★★★
()

> Но где это описано?

Что описано? То, что

Естественно, работает и более сложная конструкция


? Описано в описании более простой.

К.О.

LamerOk ★★★★★
()

Песец у людей проблемы.

Где описано ограничение на индексы массива?

В ДНК. Но это относится только к программистам.

tailgunner ★★★★★
()

> Но где это описано?

В стандарте языка: запись a[b] эквивалетна *(a+b).

Где описано ограничение на индексы массива?

???

Нигде не нашёл.

Не искал, значит

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

> В ДНК. Но это относится только к программистам.

Я так и знал, что программистки - сродни вирусам, ДНК нет, размножаются паразитированием.

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