读帮助文档发现Delphi2009的新特性,象C语言一样用数组方式使用指针.
2008-09-01 11:57
579 查看
传统的Pascal指针和数组不是等价概念.不能像数组一样使用下标指针(编译器特殊处理的PChar类型除外).
而C语言中数组就是数组第一个元素的地址.和指针在一定程度上等价.指针所指向的内容也可以象数组一样用下标来访问.
虽然问题不大但是写起代码来就麻烦,而且不直观.
如下代码以往的Delphi只能这样写.
const
rw = 10;
rh = 10;
procedure SetRects(lpRect: PRect; dwCount : Cardinal);
var
I : Integer;
begin
for I := 0 to dwCount - 1 do
begin
lpRect^ := Rect(I*rw, 0, I*rw+rw, rh);
Inc(lpRect);
end;
end;
或者非要用下标访问的话就要变通一下.
const
rw = 10;
rh = 10;
procedure SetRects(lpRect: PRect; dwCount : Cardinal);
type
TRects = array[0..0]of TRect;
pRects = ^TRects;
var
I : Integer;
lpRects : pRects;
begin
lpRects := pRects(lpRect);
for I := 0 to dwCount - 1 do
begin
lpRects[I] := Rect(I*rw, 0, I*rw+rw, rh);
end;
end;
但是Delphi2009新增了编译开关,允许象C语言一样用下标直接访问数组所指向的元素.
{$POINTERMATH ON}
const
rw = 10;
rh = 10;
procedure SetRects(lpRect: PRect; dwCount : Cardinal);
var
I : Integer;
begin
for I := 0 to dwCount - 1 do
begin
lpRect[I] := Rect(I*rw, 0, I*rw+rw, rh);
end;
end;
呵呵方便多了.
不过要注意默认是{$POINTERMATH OFF}的.
而C语言中数组就是数组第一个元素的地址.和指针在一定程度上等价.指针所指向的内容也可以象数组一样用下标来访问.
虽然问题不大但是写起代码来就麻烦,而且不直观.
如下代码以往的Delphi只能这样写.
const
rw = 10;
rh = 10;
procedure SetRects(lpRect: PRect; dwCount : Cardinal);
var
I : Integer;
begin
for I := 0 to dwCount - 1 do
begin
lpRect^ := Rect(I*rw, 0, I*rw+rw, rh);
Inc(lpRect);
end;
end;
或者非要用下标访问的话就要变通一下.
const
rw = 10;
rh = 10;
procedure SetRects(lpRect: PRect; dwCount : Cardinal);
type
TRects = array[0..0]of TRect;
pRects = ^TRects;
var
I : Integer;
lpRects : pRects;
begin
lpRects := pRects(lpRect);
for I := 0 to dwCount - 1 do
begin
lpRects[I] := Rect(I*rw, 0, I*rw+rw, rh);
end;
end;
但是Delphi2009新增了编译开关,允许象C语言一样用下标直接访问数组所指向的元素.
{$POINTERMATH ON}
const
rw = 10;
rh = 10;
procedure SetRects(lpRect: PRect; dwCount : Cardinal);
var
I : Integer;
begin
for I := 0 to dwCount - 1 do
begin
lpRect[I] := Rect(I*rw, 0, I*rw+rw, rh);
end;
end;
呵呵方便多了.
不过要注意默认是{$POINTERMATH OFF}的.
相关文章推荐
- C语言提高-36讲: 指针数组和数组指针的使用
- 深入理解C语言特性-指针 数组 声明
- C语言特性(指针数组和指向指针变量的指针)
- C语言 通过指针访问一维数组的几种方式,通过数组名访问一维数组
- C语言数组与指针的问题注意,学了那么久的C语言居然都没有发现!
- c语言 冒泡排序 使用数组方式 冒泡函数函数名为void bubble( )
- C语言计算数组的元素和(帮助理解指针)
- C语言指针数组使用案例【二级指针之指针数组】
- C语言数组与指针作为传递参数的使用
- 由一题讨论C语言中的“指针数组作main函数的形参”即 main(int argc,char *argv[])的使用
- 使用指针的方式实现数组逆序
- C语言-指针、数组、结构体、分支、循环混合使用
- 详解Swift中对C语言接口缓存的使用以及数组与字符串转为指针类型的方法
- c语言使用指针对int数组的求和
- 使用python向C语言的链接库传递数组、结构体、指针类型的数据
- 在使用C语言指针时的的一个不容易发现的陷阱
- (C语言)数组与指针的使用
- 打印不同的数(编写一个程序,使用指针访问数组方式,读入十个数,输出其中不同的数,即一个数如果出现多次,只打印一次)
- 完成strcpy函数的功能//传入的指针可以使用数组的方式赋值
- 【c语言】使用NULL和指针来寻找数组中是否存在指定的数字