看流星社区

 找回密码
 注册账号
查看: 2630|回复: 2

[Delphi] 指针与数组的问题?求助

[复制链接]

该用户从未签到

发表于 2011-3-29 08:45:41 | 显示全部楼层 |阅读模式
var
  abc:array[1..2] of integer;
  x:^integer;

begin
  abc[1]:=5;
  abc[2]:=6;
  x:=@abc;
  x[1]:=10;  
//  x指向abc数组的首地址,印象中C++里面是可以这样表示的..但Delphi这样写出错,该怎么写???

  Form1.Label1.Caption:=IntToStr(x^);
  Form1.Label2.Caption:=@abc;
//  这里我想abc数组的首地址给Label2.Caption也出错,,该如何写???

该用户从未签到

发表于 2011-3-29 08:45:59 | 显示全部楼层
你这个纯粹是概念的混淆。

x:^integer;

这里,你声明的是一个整数的指针。

x:=@abc;

这里你怎末又能把一个整数数组变量的指针赋给它哪??

C++也不支持这样的语法。

delphi :

var
  abc:array[1..2] of integer;
  x:^integer;

begin
  abc[1]:=5;
  abc[2]:=6;
  x:=@abc[1];    //一个整数
  x^:= 10;  
   
或者:
delphi:
type
      cde = array[0..1] of integer;  //声明一个整形数组类型

var
  abc: cde;
  x: ^cder;          //整形数组指针

begin

  x:=@abc;        //OK,类型匹配
  x[1]:=  10;     

C:

int abc[2];
int * p;

p = &abc[0];    //同样
*p = 10;
p ++;                //访问第二个
*p = 12;

从这里可以看出,C和PASCALL实际上使用指针模式是相同的,只是C的语法更灵活一些。

该用户从未签到

发表于 2011-3-29 08:46:16 | 显示全部楼层
x=abc;

看清楚这句,为什莫能成功?而 x=  &abc不行。

是因为C默认把一个数组变量名作为他的第一个元素的地址的。也就是说:

x= abc 实际上就是 x= &abc[0] 的变形。
点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小黑屋|手机版|Archiver|看流星社区 |网站地图

GMT+8, 2024-4-20 00:18

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

快速回复 返回顶部 返回列表