请看以下代码:
program Project2;{$APPTYPE CONSOLE}uses
SysUtils;
var
GVar1:Integer;
GVar2:Integer;function GetAddr(Const aVar):String;
begin
Result := IntToHex(Integer(@aVar),8);
end;function GetDataAddr(Const aVar):String;
begin
Result := IntToHex(Integer(aVar),8);
end;procedure WriteLocalVar2;
var
StackVar:String;
begin
StackVar := '0123456789';
Writeln('Stack Var :',GetAddr(StackVar),'Length:':15,SizeOf(StackVar));
Writeln('Variable Str:',GetDataAddr(StackVar),'Length:':15,Length(StackVar));
end;begin
{ TODO -oUser -cConsole Main : Insert code here }
WriteLocalVar;
readln;
end.问题:
1.@aVar与Integer(aVar)有什么区别?
2.当变量转换为Const时,它还是原来的类型吗?如上代码中String 变为 Const String吗?
3.当我单步进入function GetAddr(Const aVar):String;时,为什么aVar为没有值,String(aVar)为一大堆乱码,究竟怎样才能正确显示aVar的值?
program Project2;{$APPTYPE CONSOLE}uses
SysUtils;
var
GVar1:Integer;
GVar2:Integer;function GetAddr(Const aVar):String;
begin
Result := IntToHex(Integer(@aVar),8);
end;function GetDataAddr(Const aVar):String;
begin
Result := IntToHex(Integer(aVar),8);
end;procedure WriteLocalVar2;
var
StackVar:String;
begin
StackVar := '0123456789';
Writeln('Stack Var :',GetAddr(StackVar),'Length:':15,SizeOf(StackVar));
Writeln('Variable Str:',GetDataAddr(StackVar),'Length:':15,Length(StackVar));
end;begin
{ TODO -oUser -cConsole Main : Insert code here }
WriteLocalVar;
readln;
end.问题:
1.@aVar与Integer(aVar)有什么区别?
2.当变量转换为Const时,它还是原来的类型吗?如上代码中String 变为 Const String吗?
3.当我单步进入function GetAddr(Const aVar):String;时,为什么aVar为没有值,String(aVar)为一大堆乱码,究竟怎样才能正确显示aVar的值?
解决方案 »
- 今天测试了内存溢出,发现很多问题,请大家看看
- 怎样才能多次开启同一窗口??
- 怎样才能实现连续打印?一页打一条记录,连着打.....
- 这么多年了,回来看看,还有这么多的兄弟再用Delphi,真是欣慰啊!
- 用三层中遇到数据问题
- 谁有delphi中进行EXCEL数据导入数据库的代码,帮帮忙!
- 用ADOQuery之后不及时Close,会发生哪些情况!
- 有谁知道 inetcomm.dll 中函数声明的说
- 从TShape继承控件的问题(我对Delphi继承机制不熟,请大家说详细一点)
- 请问我用nmsmtp控件,如何把HTML格式的邮件发出去!
- 急需解决:将word文档存入数据库中后,如何再调用word打开显示?
- 宇宙中最强悍的Delphi资料下载
2.这个问题在程序上面没有体现出来,不过const string和string在参数当中是一样的,只不过使用const声明之后不允许改变其内容。
3.aVar没有值,但是aVar的地址是存在的。不过很抱歉,没在上面程序段当中找到string(aVar),所以有点不明白楼主实际的意思。
@aVar 是取aVar的内存地址.Integer(aVar)是将aVar转换成Integer,因为形参是无型类型.2.当变量转换为Const时,它还是原来的类型吗?如上代码中String 变为 Const String吗?
如果是引用传递应该不是原来的类型.不如不是就是原来的类型.上面代码不会..3.当我单步进入function GetAddr(Const aVar):String;时,为什么aVar为没有值,String(aVar)为一大堆乱码,究竟怎样才能正确显示aVar的值?
不明白.....
avar为什么会没有指定类型呢?
begin
Result := IntToHex(Integer(@aVar),8);
end;
这个函数应该是返回了aVar在你机器上的实际地址,并转换为16进制
const常量默认是不能改变值的,所以是“常量”,除非使用了{$J+}编译指令