delphi 中关于动态数组指针的有关问题
delphi 中关于动态数组指针的问题
,这是C++的程序,
我这么写
type
TDoubleArray = array of Double;
PDoubleArray = ^TDoubleArray;
var
pop: pDoubleArray;
setlength(pop^,M*D);
结果有错误,不知道这种动态数组指针该怎么写,求大神指导
------解决方案--------------------
动态数组本身的长度是未知的,本质上认为,动态数组就是一个指针。
他的长度在你setlength(arr,n)的时候才被设置,相当于给动态数组申请一段内存空间,空间大小为sizeof(double) * n。
这里面的pop是一个指针,指向另一个指针(动态数组),而且为对其申请空间也未将其指向某个内存地址(动态数组)。那pop^是未定义的。对一个未定义的东西,还要来一下setlength,这是什么意思?
------解决方案--------------------
pop: pDoubleArray;
popdest: TDoubleArray
setlength(popdest,M*D);
pop := @popdest;
------解决方案--------------------
a:array of char 动态数组 a 和 @a[0]等价。动态数组名a是一个指针,是数组首地址。
b:array[0...99] of char 静态数组 @b 和 @b[0]等价。静态数组名b是一个变量,是数组首元素的值b[0]
------解决方案--------------------
上述代码运行正常,可以说明你的问题了。
,这是C++的程序,
我这么写
type
TDoubleArray = array of Double;
PDoubleArray = ^TDoubleArray;
var
pop: pDoubleArray;
setlength(pop^,M*D);
结果有错误,不知道这种动态数组指针该怎么写,求大神指导
------解决方案--------------------
动态数组本身的长度是未知的,本质上认为,动态数组就是一个指针。
他的长度在你setlength(arr,n)的时候才被设置,相当于给动态数组申请一段内存空间,空间大小为sizeof(double) * n。
这里面的pop是一个指针,指向另一个指针(动态数组),而且为对其申请空间也未将其指向某个内存地址(动态数组)。那pop^是未定义的。对一个未定义的东西,还要来一下setlength,这是什么意思?
------解决方案--------------------
pop: pDoubleArray;
popdest: TDoubleArray
setlength(popdest,M*D);
pop := @popdest;
------解决方案--------------------
a:array of char 动态数组 a 和 @a[0]等价。动态数组名a是一个指针,是数组首地址。
b:array[0...99] of char 静态数组 @b 和 @b[0]等价。静态数组名b是一个变量,是数组首元素的值b[0]
------解决方案--------------------
procedure TForm1.Button1Click(Sender: TObject);
type
TDoubleArray = array of Double; // 定义动态数组类
PDoubleArray = ^TDoubleArray; // 定义指向动态数组的指针
var
A:TDoubleArray; // 声明动态数组的变量
pop: pDoubleArray; // 声明动态数组指针的变量
M,D:integer; // 声明决定动态数组大小的变量
begin
M:=12;
D:=11;
setlength(A,M*D); // 设置动态数组A的长度
pop:=@A; // 将动态数组A的地址引入 Pop指针变量
end;
上述代码运行正常,可以说明你的问题了。