关于指针使用和访问数据库的问题,望高手指点,高分送上。(200分)

  • 主题发起人 主题发起人 zhengdehei
  • 开始时间 开始时间
Z

zhengdehei

Unregistered / Unconfirmed
GUEST, unregistred user!
1.一个需要访问access的程序,在个别装有office2007的机器上,不能正常连接,使用系统自带的Jet.OLEDB驱动,请问有什么办法解决?

2.关于指针,例如

var
pint: pinteger;
pc: pchar;
i: integer;
s: string;
begin
pint:= pointer($02345678);
i:= pint^;
pc:= pointer($0233333);
s:= pc;
end;

这样用会有什么后果?是否必须要先 new(pint) ?
一直用着都很正常,但总觉得内存占用比较高,是否和这个有关?正确的写法是?

3.

type
TPack = packed record
Param1 : Dword;
Param2 : pDword;
end;

{ 全局变量 }
var
Pack: TPack;

.............
Pack.Param2^:= pointer($0341313);

这样写是否也有错?会造成什么后果?

对指针的正确用法比较迷糊,望高手指点。
 
var
pint: pinteger;
pc: pchar;
i: integer;
s: string;
begin
pint:= pointer($02345678);
i:= pint^;
pc:= pointer($0233333);
s:= pc;
end;
确保你硬编码的地址$02345678和$0233333是有效地址就没问题了 指针本身占用4字节内存。New分配指针的类型所占的内存空间 比如New PByte指针 是分配1个字节 PDWORD会分配4字节 而PWord是2字节。别把指针这个变量占的内存跟指针指向的实际数据搞在一起。

type
TPack = packed record
Param1 : Dword;
Param2 : pDword;
end;

{ 全局变量 }
var
Pack: TPack;

.............
Pack.Param2^:= pointer($0341313);

Pack.Param2是PDWORD 你后面加了解引用的^符号 赋值就应该给DWORD类型了 但是你却给个pointer($0341313) 纯粹找抽。而且还没有为Param2分配内存 就使用 更是找抽。
 
Pack.Param2^:= pointer($0341313);

Pack.Param2是PDWORD 你后面加了解引用的^符号 赋值就应该给DWORD类型了 但是你却给个pointer($0341313) 纯粹找抽。而且还没有为Param2分配内存 就使用 更是找抽。


这里写错了,应该是 Pack.Param:= pointer($0341313);


现在最关心的是,指针使用前,是否必须NEW()?如果不用NEW,会出现什么后果?
 
指针有两个作用,一个是保存一个引用,一个是保存值,比如申明了一个integer指针,你可以直接用他来保存一个integer简单类型的值,不需要申请内存,因为integer指针一个integer类型的值一样占用相同内存字节,但是如果这个指针需要保存一个复杂的对象,这个对象占用的内存比指针本身编译时候分配的内存大,那么需要申请内存,而如果只是想保留对这个对象的引用,就是这个指针指向这个对象的起始地址,那么不需要申请内存,道理同上,对象的起始地址和这个指针所需的内存相同,说白了就是比较内存够不够,够就不需要申请,不够就申请
 
to hanpengshan_00

如果不申请,不会出现异常吧?
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
551
import
I
后退
顶部