var
a:integer;
p:pointer;
begin
a:=55;
p:=@a;
showmessage(inttostr(integer(p^)));
end;
为何showmessage(inttostr(integer(p^)))不可以写成showmessage(inttostr(p^)),p^不就是55吗?P指向a的地址,integer(p^)代表什么意思?我没有找到integer这个函数的用法.integer的用法是integer(地址),还是integer(地址中的内容),返回值是地址中的内容,即代码中的55.
请大家指点.
a:integer;
p:pointer;
begin
a:=55;
p:=@a;
showmessage(inttostr(integer(p^)));
end;
为何showmessage(inttostr(integer(p^)))不可以写成showmessage(inttostr(p^)),p^不就是55吗?P指向a的地址,integer(p^)代表什么意思?我没有找到integer这个函数的用法.integer的用法是integer(地址),还是integer(地址中的内容),返回值是地址中的内容,即代码中的55.
请大家指点.
解决方案 »
- 这论坛不准让人发帖回帖,有什么意思
- 请问关于结构体的操作问题?
- 寻求串口通讯代码
- 请教一数组与tstringgrid组合使用的问题
- 有福安的朋友吗?进来看看
- 如何取得ListView中指定行和列的数据值?(急,在线等待)
- 请问如何在程序中显示/关闭DXDBGRID中的表格的PREVIEW?
- 我用ASP.net+IIS为或c/s(比如用VB或DELPHI开发)开发环境,但想用WorkFlow定义工作流程,如下思路能否行得通!?指教……
- 请教谁知道RAR为扩展名的文件的浏览器
- 大侠!使用query控件时出现error creating cursor handle?
- 面向对象是否过时?
- 求一个政府办公系统流程图
告诉编译器,你想要指的是哪种数据类型的。。
编译器对POINTER指向的数据不作任何类型的缺省假定。。
var
a:integer;
p:pointer;
begin
a:=55;
p:=@a;
showmessage(inttostr(integer(p^)));
end;
为何showmessage(inttostr(integer(p^)))不可以写成showmessage(inttostr(p^)),
p^不就是55吗?P指向a的地址,integer(p^)代表什么意思?我没有找到integer这个函数
的用法.integer的用法是integer(地址),还是integer(地址中的内容),返回值是地址中
的内容,即代码中的55.
请大家指点.
//================
你的错误原因:你的指针p,它是个空指针,对应于c++的void类型的指针,不指向
任何类型,仅仅是个地址而已,除非进行显示转化,否则不能进行指针运算,也不能
间接引用>>>>>>>>>>>>>>>>>>>>>>>>>>>>>...象下面这样就行!
*)
procedure TForm1.Button1Click(Sender: TObject);
var a:integer;
//p:pointer;
pTemp:^integer;
begin
a:=55;
pTemp:=@a;
showmessage(inttostr(pTemp^)+#10#13+inttostr(integer(pTemp^)));
end;
p:pointer这样定义编译器无法识别地址中内容的类型,所以得先强制转换一下
这样定义就不用转了
var
a:integer;
p:^integer;
begin
a:=55;
p:=@a;
showmessage(inttostr(p^));
end;
var b:integer;
begin
b:=integer(p^);//因为他是个无类型指针啊
showmessage(inttostr(b));
end;
就好了哦
因為void/pointer類型沒辦法確定其代表得大小 也就是其尋址空間不能確定比如
p: PInteger;new(p);
p^ := 999; // p是一個Integer型指針 編譯器就知道該尋址一個Integer大小得空間 然後進行賦值
既然有INTEGER(P^),不知有没有STRING(P^),强制转换成字符型,或者是别的类型.