灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:3530回复:0

delphi与变长参数——可变类型开放数组(3)

楼主#
更多 发布于:2012-09-08 13:04

可变类型的开放数组
    
       现在回到文章开头提到的可变类型的开放数组,可变类型的开放数组允许向单个过程或函数传递不同类型表达式的数组。要定义含有变体开放数组参数的方法,需要指定“array of const”或“array of TVarRec”作为参数类型

//定义含有变体开放数组参数的方法
procedure DOSomething(A: array of const);

procedure DOSomething(A: array of TVarRec);
        array of const在定义参数时等价于array of TVarRec。array of const 只能指定参数的类型为可变类型的开放数组参数(array of TVarRec),而不能用其定义数组变量,但array of TVarRec还可以用来定义TVarRec类型的数组变量,而且可以将这个数组变量当作参数传递给可变类型的开放数组参数的方法。

var  
arr:array of const;//错误
arr:array of TVarRec;//合法
DOSomething(arr);//合法
       TVarRec类型用于含有array of const类型的参数的函数内部,编译器自动通过开放数组构造器来构造开放数组参数的实参,将构造器中的每个元素转换为TVarRec值,VType字段表示每个TVarRec值的简单类型,可变类型常量(如vtInteger类型时的VInteger)表示为传递到TVarRec结构中的标记字段的值。
       虽然TVarRec是可变类型,它能“容纳”各种基础数据类型,但这种“容纳”是通过开放数组构造器来实现的,编译器本身并不能自动实现,即TVarRec与其他数据类型是不兼容的,不能将其他类型的数组变量传递给开放数组参数的方法。

DOSomething([1,2,'a','tht']);//正确

var
arr:array[0..10] of Integer;
...//赋值
DOSomething(arr);//错误
开放数组构造器
       开放数组构造器允许在函数或过程调用中直接构造数组;它们仅用于传递开放数组参数或可变类型开放数组参数。
       与集合构造器相似,开放数组构造器是一个由方括号封装、逗号隔开的表达式序列。开放数组构造器仅用于传递值参数或常量参数。构造器中的表达式必需与开放数组参数的基类型是赋值兼容的。对于可变类型开放数组参数的情况,表达式可以是不同类型的。
  




喜欢0 评分0
游客

返回顶部