You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Free Pascal快速排序函数修改数组定义后正常运行的原因问询

Free Pascal程序运行异常原因解析

核心原因是Free Pascal中开放数组参数和固定类型数组参数的索引规则存在差异:

  • 最初代码中procedure QuickSort(var arr : array of integer; l,r : integer);的array of integer属于开放数组参数,Free Pascal规定:无论传入的原数组下界是多少,开放数组在函数内部的默认下界固定为0,上界为传入数组的元素总数减1。
    你定义的全局数组A的索引范围是1..100,调用QuickSort时传入的左右边界是1和n,进入函数后用1作为起始索引访问arr,实际定位到的是原数组的第2个元素,后续还会触发索引越界,因此程序无法正常运行。
  • 修改后你自定义了Array_ = array[1..100] of integer;类型,函数参数指定为var arr : Array_,属于固定类型数组参数,传入数组后会完全保留原数组的1开头索引规则,和你传入的1~n的边界完全匹配,因此程序可以正常运行。

如果你需要保留开放数组的灵活性(适配不同大小的数组),可以选择以下任意一种方式修正:

  1. 调用QuickSort时传入适配开放数组索引的边界:QuickSort(A, 0, n-1);
  2. 在QuickSort函数内使用Low(arr)、High(arr)函数动态获取数组的实际上下界,避免硬编码索引带来的适配问题。

内容的提问来源于stack exchange,提问作者Duc Minh Nguyen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 10:51:02