还是不能理解指针、动态数组、静态数组

wuxuguahuai 2009-01-16 09:54:57
[code=type
TArray = array of char;
PArray = ^TArray;

var
ar:array[0..15] of char;


implementation

var
my_array:TArray;
i:integer;

my_array :=@a;
for i := 0 to 14 do
begin
a[i] := 'b';
end;
a[15] := Char(63);
my_array[0]:='a'; //这一句 为什么是my_array[0]而不是my_array^[0]呢][/code]
...全文
172 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
lihuasoft 2009-01-16
  • 打赏
  • 举报
回复

type
TArr = array of char;
PTArr = ^TArr;

var
A: array[0..15] of char;
Arr: TArr;
PArr: PTArr;

procedure TForm1.Button1Click(Sender: TObject);
begin
PArr := @Arr;
ShowmessageFmt('Arr位于%x,Arr指向%x,PArr位于%x,PArr指向%x,PArr^指向%x,@A位于%x',[Integer(@Arr), Integer(Arr), Integer(@PArr), Integer(PArr), Integer(PArr^), Integer(@A)]);
Arr := @A;
ShowmessageFmt('Arr位于%x,Arr指向%x,PArr位于%x,PArr指向%x,PArr^指向%x,@A位于%x',[Integer(@Arr), Integer(Arr), Integer(@PArr), Integer(PArr), Integer(PArr^), Integer(@A)]);
CopyMemory(@A[3], @'test'#0[1], 5);
Showmessage(StrPas(@A[3]));
Showmessage(StrPas(@Arr[3]));
Showmessage(StrPas(Pointer(Integer(PArr^)+3)));
end;
fangsp 2009-01-16
  • 打赏
  • 举报
回复
你要理解两点:
1.my_array:TArray; my_array 是一个数组类型,访问数组元素一般采用下标的方式访问
PArray = ^TArray; PArray是一个数组指针。
2.在Delphi中,取地址用@,不同于其它语言的&,指针运算用^,不同于其他语言的*


yc_8301 2009-01-16
  • 打赏
  • 举报
回复

type
TArray = array of char;
PArray = ^TArray;

var
ar:array[0..15] of char;


implementation

var
my_array:TArray;
i:integer;
my_Parray:PArray;

my_array :=@a;
my_Parray :=@my_array;
for i := 0 to 14 do
begin
a[i] := 'b';
end;
a[15] := Char(63);
my_array[0]:='a'; //这一句 为什么是my_array[0]而不是my_array^[0]呢
my_Parray^[0]:='a'; //这样就可以使用my_Parray^[0]了,注意my_Parray和my_array的区别

bdmh 2009-01-16
  • 打赏
  • 举报
回复
my_array:TArray;
TArray 是 array of char,是char组成的数组
既然 my_array声明为 TArray,那my_array也就是char的数组,访问数组当然用下标访问了
liangpei2008 2009-01-16
  • 打赏
  • 举报
回复

var
my_array:TArray;
i:integer;

my_array :=@a;//把在栈中声明的字节数组首址传给my_array,这时,my_array与ar就是一家人了!
for i := 0 to 14 do
begin
a[i] := 'b';
end;
a[15] := Char(63);
my_array[0]:='a'; //这里的等效语句也可以为ar[0]:='a'

yc_8301 2009-01-16
  • 打赏
  • 举报
回复
my_array 是TArray类型,是数组。而不是PArray类型(数组指针)
所以不能用数组指针的方法来访问my_array变量。
也就是说如果,my_array定义成一个PArray的话,就可以使用my_array^[0]来访问其中的成员了。
wuxuguahuai 2009-01-16
  • 打赏
  • 举报
回复
type
TArray = array of char;
PArray = ^TArray;

var
ar:array[0..15] of char;


implementation

var
my_array:TArray;
i:integer;

my_array :=@a;
for i := 0 to 14 do
begin
a[i] := 'b';
end;
a[15] := Char(63);
my_array[0]:='a'; //这一句 为什么是my_array[0]而不是my_array^[0]呢
wuxuguahuai 2009-01-16
  • 打赏
  • 举报
回复
有些想法了 谢谢

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧