读书人

指针变量和指针类型的关系解决方法

发布时间: 2012-02-23 22:01:34 作者: rapoo

指针变量和指针类型的关系
最近看了内存映射的文章

看代码,发现一处地方难懂。

它代码中有一句

PShare := PShareMem(MapViewOfFile(MapHandle, FILE_MAP_ALL_ACCESS, 0, 0, 0));

其中pshare是psharemem类型的变量

单元的接口部分定义了类型
type
PShareMem = ^TShareMem;
TShareMem = record
Data: array[0..255] of char;
end;

var
PShare: PShareMem;

就是这样的

但是我不懂

PShare := PShareMem(MapViewOfFile(MapHandle, FILE_MAP_ALL_ACCESS, 0, 0, 0));
这一句,为什么要这样?什么用意?

PShareMem()这样算什么呢?这又不是函数,难道指针可以这样?

MapViewOfFile(MapHandle, FILE_MAP_ALL_ACCESS, 0, 0, 0)返回的是内存地址。

而用指针类型()表示什么?为什么不能直接

PShare :=MapViewOfFile(MapHandle, FILE_MAP_ALL_ACCESS, 0, 0, 0);




[解决办法]
PShare := PShareMem(MapViewOfFile(MapHandle, FILE_MAP_ALL_ACCESS, 0, 0, 0));
==================================================================================

PShare是TShareMem类型指针,而MapViewOfFile函数返回的是个无类型指针,为了指针类型匹配,采取强制类型转换PShareMem(),将Pointer转换成PShare.

[解决办法]
PShare本来就是PShareMem类型的嘛
如果不PShare := PShareMem(MapViewOfFile(MapHandle, FILE_MAP_ALL_ACCESS, 0, 0, 0));这样的,类型肯定不匹配的啊

读书人网 >.NET

热点推荐