Здравствуйте, T4r4sB, Вы писали:
TB>Послушай дядя, давай ты перестанешь сам себе противоречить
TB>извинишься за пиписькомерский базар или пойдёшь нафиг, ок?
Или в другой раз будешь аккуратней с безапелляционными заявлениями.
На них чаще реагируют. ))
TB>Ты противоречия не видишь, не?
Были бы противоречия, ты бы их давно показал.
TB>Смотри, индекс — это смещение.
Смотрю — для массива [1..10] это уже не так.
Еще раз, медленно, индекс — это некие данные, требуемые для поиска целевых.
Для поиска целевых данных по нулевому смещению в массиве выше индекс будет равен 1.
(и на всяк случай — смещение не в байтах, а в элементах)
TB>Смещение — это разница между адресом элемента и адресом начала. Значит, индекс знаковый, это если махать руками, как ты любишь.
Индекс
может быть знаковым, ес-но, о чём было сказано:
тип интегрального выражения-индекса массива в Си приводится компилятором к size_t или ptrdiff_t, т.е. к беззнаковому или знаковому интегральному типу шириной в адрес данных
Встроенный массив в Си представлен адресом своего первого элемента.
Разница указателей — это знаковый тип ptrdiff_t, значение этого типа может быть индексом массива или, согласно адресной арифметике Си, значение типа ptrdiff_t можно складывать со значением указателя, получая положительно или отрицательно смещенное итоговое значение. Вычитать тоже можно, ес-но.
TB>А если смотреть на практику, а не на твои бессмысленные философствования, то беззнаковые индексы — это проблема и скрытая ловушка для некоторых видов вычислений. Вот и всё.
Я нигде не вижу беззнаковых индексов, ни в С/С++, ни в си-подобном C#, где индекс массива привоится либо к int, либо к long.
"Проблема" там только для тех, кто плавает в самой базе.
Индекс массива унутре всегда приводится к ширине адреса, где последующим вычислениям, происходящим в дополнительном двоичном коде, ГЛУБОКО ДО ФЕНИ насчёт того, знаковый был тип второго слагаемого или нет. ))
Т.е., эти условности
тип интегрального выражения-индекса массива в Си приводится компилятором к size_t или ptrdiff_t, т.е. к беззнаковому или знаковому интегральному типу шириной в адрес данных
работают сугубо в процессе расширения интегрального значения выражения-индекса до ширины адреса.
И да, в том же дотнете уже ввели тип данных nint — это знаковый тип данных шириной в
native адрес, поэтому вопрос можно считать почти исчерпанным.
В сях давно околостандартным стал аналогичный ssize_t.