看一个指针用法的例子:
ar
X,Y:Integer;
P:^Integer;
cStr:String;
begin
X:=17;
P:=@X; //书上说指针是一个无符号整数,把X的地址赋给P,此时P里存的是一个什么值?一个整数?
//我用str(P,cStr)说是类型不符了。STR(X,cStr)就可以,所以P也不是一个整数啊...
//那此时P的值究竟是多少?怎么获取?我想看看地址究竟是什么东西。
Y:=P^;
end;
ar
X,Y:Integer;
P:^Integer;
cStr:String;
begin
X:=17;
P:=@X; //书上说指针是一个无符号整数,把X的地址赋给P,此时P里存的是一个什么值?一个整数?
//我用str(P,cStr)说是类型不符了。STR(X,cStr)就可以,所以P也不是一个整数啊...
//那此时P的值究竟是多少?怎么获取?我想看看地址究竟是什么东西。
Y:=P^;
end;
解决方案 »
- delphi7 编译期出现ntdll错误,如何捕获错误原因?
- delphi .dpk与.dpl有什么不同?
- 怎样判断图片的大小,然后让image自动适应图片的大小
- 热烈庆祝饭桶JR又成功骗得了我200分!
- ask for delphi engineer for a job
- 怎么才能把adoquery的结果输入到STRINGGRID或DBGRID都行。然后可以选择字段打印出来?最好有DEMO
- 请问一下开发一个类似Acdsee图像浏览软件用哪种好??
- datetimepicker显示日期的问题?
- 在英文版WIN98的简体/英文版WORD2000中打印中文字,为什么有些中文打印不出来?
- 编译错误:File not found:'DBGRIDEH.RES',该如何解决?
- delphi 的抽象方法
- 函数返回指针问题
var
X,Y:Integer;
P:^Integer;
cStr:String;
begin
X := 17;
P := @X;
Str(P^,cStr); //P是指针,你要访问其中的值,要对它解引用
ShowMessage(cStr);
end;
x:='某某市某某县某某小区某某门牌号'
这是一个地址,它指向一个名叫'张三'的人。
那么当P:=@X时,我要看到P的值就是'某某市某某县某某小区某某门牌号'
当要获取P这个地址的值时,P^就能得到'张三'。
P指向的值就是X的值:P^打个比方,内存就好比数组a: array[0..9] of Byte;
现在假设X就是a[3],即a[3]=X=17,那么P的值就是X的地址3,而P指向的值就是a[3]
地址 内存的地址 比如内存中有100字节空间 我给这100个字节空间标号1 2 3 4 5 等等
1 指的就是那100个字节空间中的第一个字节 1就是一个内存地址
我要在1这个字节空间里存放数据 17 那1的地址内容就是17
变量 要有类型 可说明我要存放的数据要用到多少个字节空间 比如 如果是 char 可能是这个变量占1个字节空间
如果是 int 可能占2个字节空间 那么存放变量中指定的值就要占两个字节空间
a int a=17 如果机器分配给 a的内存地址是 3 4两个字节空间 那么 @a=3 ,@3+1 =4 3 4 的地址都用来存放数据 17
var
x:Integer;
p:^Integer;
st:string;
begin
x := 17;
p := @x;
ShowMessage(IntToStr(Integer(p)));//p的值是地址,可能是1254201这么个东西。
ShowMessage(IntToStr(p^));//p^是p指向地址保存的值,就是17
end;
门牌号虽然本质上一个无符号整数,delphi的严谨语法不允许你直接把他等同于整数来处理。你需要做显式的类型转换,将这个门牌号转换为一个整数。