На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Друзья, соблюдайте, пожалуйста, правила форума и данного раздела:
Данный раздел не предназначен для вопросов и обсуждений, он содержит FAQ-заготовки для разных языков программирования. Любой желающий может разместить здесь свою статью. Вопросы же задавайте в тематических разделах!
• Если ваша статья может быть перенесена в FAQ соответствующего раздела, при условии, что она будет оформлена в соответствии с Требованиями к оформлению статей.
• Чтобы остальным было проще понять, указывайте в описании темы (подзаголовке) название языка в [квадратных скобках]!
Модераторы: Модераторы
Страницы: (2) 1 [2]  все  ( Перейти к последнему сообщению )  
> Функции Split, Join, GetElement , [Delphi] Строка с разделителями <=> массив элементов
    Цитата leo @
    Нет, в обоих случаях массив передается непосредственно по указателю, и разница лишь в том, что при Arr:TStringArray ничего доп-но не передается и High(Arr) определяется внутри функции по теневому заголовку Arr (вызовом _DinArrayHigh), а в случае с open array _DinArrayHigh(Arr) вызывается до вызова функции и передается в нее в виде доп.теневого параметра, а внутри функции High(Arr) просто берет это значение из параметра (в данном случае из регистра EDX)

    О! А я всё кумекал, в чем разница и почему нельзя просто сделать одну функцию для обоих случаев. Спасибо!
      Цитата Fr0sT @
      О! А я всё кумекал, в чем разница и почему нельзя просто сделать одну функцию для обоих случаев

      В качестве open array параметра, можно передавать не только [...] - конструктор массива "на лету", но и любой массив, совместимый по типу элементов (динамический, статический или выделенный в куче по GetMem), а также одну переменную типа элемента массива (которая рассматривается как массив длины 1). Причем для статических и выделенных по GetMem массивов, во-первых, не обязательна индексация от 0 (хотя внутри функции open array по любому индексируется с 0), во-вторых, можно передавать не весь массив, а произвольное число первых элементов с помощью псевдофункции Slice(массив,Count), которая на этапе компиляции просто заменяет значение передаваемого теневого параметра High(Arr) на Count.
      Ну и разумеется, во всех этих случаях при объявлении параметра-массива как const в функцию просто передается указатель на исходный массив и значение High=Count-1
        Fr0sT в итоге что, в первом посте у тебя финальная версия кода?
        Если нет - то приведи в порядок, перед НГ будем причесывать раздел и переносить все в FAQ, поэтому желательно чтобы все было готово.
          Rouse_, готово.
          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
          0 пользователей:


          Рейтинг@Mail.ru
          [ Script execution time: 0,0221 ]   [ 16 queries used ]   [ Generated: 19.03.24, 02:20 GMT ]