LINUX.ORG.RU

максимальное число элементов в массиве в С?

 , , openrange


1

3

эт что же массив(еденичных элементов) по определению меньше всего адресного пространства ??

т.е если вся память адреса 0...2^64-1 то массив элементов единичного размера начинающийся с 0 адресса не может в себе содержать элемент максимального значения типа индекса

( ща когда 64 бита это не очень актуально но для 32 и тем более 16 оказывается массив(байтов) обязан быть меньше сегмента байтов.)

★★☆
Ответ на: комментарий от anonymous

И какой общий интерфейс ты у них видишь? Напоминаю, что из существования множества всех множеств получается парадокс Кантора — не следует злоупотреблять обобщением.

никакого общего интерфейса я не вижу, про Кантора знаю, но это никак не мешает мне утверждать, что индекс к размеру отношения НЕ имеет.

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

Индекс чего? К размеру чего? Ты же сам писал, что в C для массивов максимальный индекс равен количество элементов минус 1.

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

никакого общего интерфейса я не вижу, про Кантора знаю

И это тебе не мешает говорить про обобщенную коллекцию?

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

Индекс чего? К размеру чего? Ты же сам писал, что в C для массивов максимальный индекс равен количество элементов минус 1.

не просто «равен», а только «численно равен». На самом деле это разные вещи, и индекс равен только численно, и то лишь по счастливому совпадению, связанному с удачным выбором базы, и ограниченной ОДЗ индекса. Взяв другую базу, и/или выйдя за ОДЗ ты всё поломаешь.

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

И это тебе не мешает говорить про обобщенную коллекцию?

про её индекс, точнее про то, что индекс к размеру не относится — не мешает.

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

То у тебя

что индекс к размеру отношения НЕ имеет

То у тебя максимальный индекс «численно равен» количество элементов минус 1 при определенных значениях значениях базы и количества элементов. Ты уж определись.

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

Взяв другую базу

А нельзя в C взять другую базу. Твое a[-1] по стандарту UB

If both the pointer operand and the result point to elements of the same array object, or one past the last element of the array object, the evaluation shall not produce an overflow; otherwise, the behavior is undefined.

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

выйдя за ОДЗ

Если количество элементов положительно помезается в ОДЗ типа, то и (количество элементов-1) тоже будет помещаться в этот тип.

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

То у тебя максимальный индекс «численно равен» количество элементов минус 1 при определенных значениях значениях базы и количества элементов. Ты уж определись.

в сишечке в силу некоторых совпадений обычно индекс имеет какое-то отношение к размеру. Например размер ОДЗ индекса равен размеру массива. При некоторых условиях максимальный индекс действительно численно равен размеру массива, даже без -1.

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

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

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

А нельзя в C взять другую базу. Твое a[-1] по стандарту UB

это НЕ UB, если a указывает на ВТОРОЙ элемент массива. Я имею полное право сначала прибавить к указателю на массив 1, а потом вычесть. Даже для массива в один эл-т.

If both the pointer operand and the result point to elements of the same array object, or one past the last element of the array object, the evaluation shall not produce an overflow; otherwise, the behavior is undefined.

а я здесь остаюсь в рамках массива. Никуда не выходил ещё.

(да, посмотрел по ссылке — там я про это забыл сказать, извини)

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

Если количество элементов положительно помезается в ОДЗ типа, то и (количество элементов-1) тоже будет помещаться в этот тип.

и что?

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

При некоторых условиях максимальный индекс действительно численно равен размеру массива, даже без -1.

int a[5];
a[5];

UB, так как присутствует разыменование указателя.

Так в каких случаях максимальный индекс численно равен размеру массива (без -1), если считать за индекс то значение которое можно поставить в [] в выражении (не в декларации)?

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

Я имею полное право сначала прибавить к указателю на массив 1

Да, но в этом случае у тебя не получится изменить базу индексации массива на 1.

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

Так в каких случаях максимальный индекс численно равен размеру массива (без -1), если считать за индекс то значение которое можно поставить в [] в выражении (не в декларации)?

в a[] нельзя поставить N, ибо a[N] это разименование. А вот написать int *b = a+5; вполне можно. А потом можно b[-1].

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

Как он относиться к вопросу. Где у тебя

максимальный индекс численно равен размеру массива (без -1), если считать за индекс то значение которое можно поставить в [] в выражении (не в декларации)

. Или твой ответ надо читать так

Ни в каких случаюх максимальный индекс не будет численно равен размеру массива (без -1), если считать за индекс то значение которое можно поставить в [] в выражении (не в декларации).

Если так, то зачем писать остальную часть вопроса?

А вот написать int *b = a+5; вполне можно. А потом можно b[-1].

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