procedure TForm1.Button1Click(Sender: TObject);
var ptr, ptr2 : ^integer;
i : integer;
begin
i:=111;
ptr:=@i;
edit1.Text:=inttostr(ptr^);
ptr2:=pointer(i);//怀疑转化为指向variant类型的指针,edit2.Text:=vartostr(ptr2^);同样报错
edit2.Text:=inttostr(ptr2^);//这行报错
end;
var ptr, ptr2 : ^integer;
i : integer;
begin
i:=111;
ptr:=@i;
edit1.Text:=inttostr(ptr^);
ptr2:=pointer(i);//怀疑转化为指向variant类型的指针,edit2.Text:=vartostr(ptr2^);同样报错
edit2.Text:=inttostr(ptr2^);//这行报错
end;
i:=111;
ptr:=@i; //让ptr指向i所在的地址,正确
edit1.Text:=inttostr(ptr^); //显示ptr所指向的内存空间的内容,即i的值,正确
ptr2:=pointer(i); //强制转换i的内容为一个地址,即让ptr2指向内存111这个地址,正确。 edit2.Text:=inttostr(ptr2^); //取ptr2所指向的内存空间的内容,即111这个地址的内容,非法访问,报错。
//ptr2^, 取指向111这个地址的内容,111这个地址不允许访问。肯定报错。 连个的区别:
pointer(i),将i的内容强制转换为一个地址。
@i 取变量i的内存地址
=========
从X的首地址开始取4字节,并强制转换为Pointer类型@x
=========
取X的首地址
=========
取X的变量内容转换为Pointer,大小为sizeof(Pointer).可能截断X的实际数据.@x
=========
返回一个变量,该变量大小sizeof(Pointer),变量内容指向X的地址.