TVarRec a[2];//声明数组
a[0] = "li"; //赋值,和普通数一样,但是元素类型可以同时多种
a[1] = 30;
ShowMessageFmt("your hello %s %d",a,ARRAYSIZE(a)-1);//显示数组
//从数组中取元素显示,不能直接ShowMessage(a[0]),会抛出异常
//显示字符串
AnsiString Str= (char*)a[0].VString;//或者AnsiString Str = a[0].VPChar;
ShowMessage(Str);
//显示整数
ShowMessage(a[1].VInteger)
Format函数有一个参数就是TVarRec,函数原型为(C++builder6帮助文件):
extern PACKAGE AnsiString __fastcall Format(const AnsiString Format, const System::TVarRec* Args, const int Args_Size);
此函数的第二个参数如何赋值呢?有两种方法:
TVarRec a[] = {12,29};
AnsiString str = Format("%d %d",a,ARRAYSIZE(a)-1);
或
AnsiString str = Format("%d %d",ARRAYOFCONST(a));
或
AnsiString str = Format("%d %d",ARRAYOFCONST((12,29)) );
或
AnsiString str = Format("%d %d",OPENARRAY(TVarRec,( 12,29 )));
Format函数的第三个参数为TVarRec数组中的最大索引号,第二种方法中的ARRAYOFCONST是一个宏,这个宏展开后,实际和其他两种方法是一样的。
不定长数组的元数读写:
TVarRec args[4] = {8,123.456,"hello"};
AnsiString a = Format("%d,%f,%s",args,3);//将TVarRec转成AnsiString
args[0] = 21;
ShowMessage(args[0].VInteger);
//修改float值
float d = 2.9;
args[1] = d;
ShowMessage(FloatToStr(*args[1].VExtended));
char * p = args[2].VPChar;
strcpy(p,"abc");
ShowMessage(args[2].VPChar);