关于指向数组的指针 ( 积分: 50 )

  • 主题发起人 主题发起人 francais
  • 开始时间 开始时间
F

francais

Unregistered / Unconfirmed
GUEST, unregistred user!
c语言中,对于数组a[],a就是数组的首指针
delphi中怎么指向数组的首地址啊?是和C一样吗?
谢谢
 
c语言中,对于数组a[],a就是数组的首指针
delphi中怎么指向数组的首地址啊?是和C一样吗?
谢谢
 
主  题: 在delphi中怎么访问一个指向数组的指针?

A: Pointer;
B: array of string;

A:=@B;

怎用A得到数组中的值啊?

回复人: wolf2005() ( ) 信誉:94 2003-12-11 17:30:23Z 得分:10

?
A

Top

回复人: xyc189() ( ) 信誉:100 2003-12-11 17:37:04Z 得分:10

?
A^

Top

回复人: tlihui(阿南) ( ) 信誉:94 2003-12-12 08:58:51Z 得分:0

?
如果B是二维动态数组,我怎么用A得到它行、列?

Top

回复人: tlihui(阿南) ( ) 信誉:94 2003-12-12 09:01:14Z 得分:0

?
二位的回答好像不能用啊

Top

回复人: tlihui(阿南) ( ) 信誉:94 2003-12-12 11:14:56Z 得分:0

?
没人知道?


Top

回复人: jacky_shen(jacky) ( ) 信誉:106 2003-12-12 11:20:08Z 得分:30


?
procedure TForm1.Button3Click(Sender: TObject);
type
TB = array of array of string;
var
A: Pointer;
B: TB;
I, J: Integer;
begin
SetLength(B, 4);
for I := 0 to Length(B) - 1 do
SetLength(B, 10);
for I := 0 to 3 do
for J := 0 to 9 do
B[I, J] := IntToStr(I * J);
A := B;
ShowMessage(TB(A)[3, 3]);

ShowMessage(IntToStr(High(TB(A)) + 1))
// 行数
ShowMessage(IntToStr(High(TB(A)[0]) + 1))
// 列数
end;

结贴 ,得分记录: wolf2005 (10)、 xyc189 (10)、 jacky_shen (30)、
 
delphi中的数组访问也跟C的差不多,但delphi没有C那么强调指针。
delphi里的静态数组和动态数组有差别,访问静态数组的首地址要用取地址运算符@,
而动态数组则是直接用数组名(也即动态数组的数组名就是一个地址指针),例如:
1.静态数组操作(要在窗体中添加一个Memo和三个Button):
type //定义类型
PMyArray = ^TMyArray;
TMyArray = array[1..5,1..5]of integer;
DArray =array of integer;

var //声明变量
MyArray1 :TMyArray;
MyArray2 :TMyArray;
arrPtr :PMyArray;

procedure TForm1.Button1Click(Sender: TObject)
//对MyArray1赋值
var
i,j :integer;
begin
for i :=1 to 5 do
for j :=1 to 5 do
begin
MyArray1[j] :=j+3;
end;
end;

procedure TForm1.Button2Click(Sender: TObject)
//对arrPtr赋值并通过其读取数组
var
i,j :integer;
begin
arrPtr :=@MyArray2
//取首地址
for i :=1 to 5 do
for j :=1 to 5 do
Memo1.Lines.Add(inttostr(arrPtr^[j]))
//指针运算符结合下标进行访问
end;

procedure TForm1.Button3Click(Sender: TObject)

begin //数组间的赋值(是通过数组名字整个拷贝)
MyArray2 :=MyArray1;
end;

以上操作可分两种(按照点击Button的先后次序,分别体会一下操作结果就可知道
静态数组的访问特性):
Button3 --> Button1 --> Button2
Button1 --> Button3 --> Button2

2.动态数组
以上操作中如果 MyArray2 和 MyArray1都是动态数组变量,即都为DArray型
则通过名字赋值MyArray2 :=MyArray1就会使两个变量同时指向一个数组内存单元,
也就是动态数组通过变量名访代表数组首地址,变量间的操作将是数组首地址的引用
操作,访问数组中的指定元素还是用下表法MyArray
 
1、动态数组:
a: array of Integer;
首地址就是变量内容:Pointer(a)
2、静态数组:
a: array[0..9] of Integer;
首地址就是变量地址:@a
 
后退
顶部