Дож писал(а):И нет: передать динамический массив не то же самое, что передать открытый массив.
Меня интересует только то, что видно снаружи. Во внутренности я не вдаюсь. А снаружи это выглядит одинаково.
Модератор: Модераторы
Дож писал(а):И нет: передать динамический массив не то же самое, что передать открытый массив.
Vadim, вы в предыдущем же сообщении написали, что динамический массив никак не передать в процедуру,

А есть гарантия, что все элементы опенэрррэя при доступе в обход паскалевского менеджера памяти лежат в непрерывной области памяти -то есть пригодны для итерации указателя средствами "С"?

А есть ли реальная необходимость, не доверяя компилятору, задавать прямо в коде выравнивание для разных участков программы?
И такой ещё вопрос: если в сишном коде явно не указана "pragma pack", выравнивание ведь тоже производится?
struct S {
    char first;
    char a[2];
    int b;
};
An array type describes a contiguously allocated nonempty set of objects with a particular member object type, called the element type.
По какому принципу? А тип struct?

n array type describes a contiguously allocated nonempty set of objects with a particular member object type, called the element type.


Аллокйэтид или аксессед ?
А вот доступ к элементам массива по смешению указателя от стартового элемента - это скорее лайф-хак, работающий пока массив не заредизайнили
A postfix expression followed by an expression in square brackets[] is a subscripted designation of an element of an array object. The definition of the subscript operato r[] is that E1[E2] is identical to (*((E1)+(E2))). Because of the conversion rules that apply to the binary+operator, if E1 is an array object (equivalently, a pointer to the initial element of an array object) and E2 is an integer, E1[E2] designates the E2-th element of E1(counting from zero).

Массивов не может быть в невыделенной памяти.
а описанное в стандарте поведение (арифметика указателя приравнена к арифметике обращения к массиву)

Он может как в джаве собираться из выделенных кусоов
Уже для строковых (при строках разной длины) массивов не работает.



Какое утверждение стандарта было нарушено?


Стандарт-то тут причём? Можете процитировать утверждение стандарта, которое каким-то образом было нарушено "кодом", который мне не удалось написать?

Вернуться в Free Pascal Compiler
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1