两个奇怪的取地址符号

function Fun(x: Integer): Integer;
asm
  mov ecx, &x
  dec ecx          {汇编中的 dec 是减 1 指令, 和 Delphi 是一样的}
  mov @Result, ecx  {在本例中去掉 @ 也可以, 暂时不知怎么回事}
end;

去掉两个符号,对结果没有任何影响:

function Fun(x: Integer): Integer;
asm
  mov ecx, x
  dec ecx          {汇编中的 dec 是减 1 指令, 和 Delphi 是一样的}
  mov Result, ecx  {在本例中去掉 @ 也可以, 暂时不知怎么回事}
end;

现在不懂,先留个爪以后研究。参考:
http://www.cnblogs.com/del/archive/2008/01/25/1052465.html
http://www.cnblogs.com/del/archive/2008/01/25/1052262.html

两个奇怪的取地址符号

时间: 2024-11-08 23:48:39

两个奇怪的取地址符号的相关文章

数组名a、数组名取地址&a、数组首地址&a[0]、数组指针*p

本文链接:https://blog.csdn.net/loongkingwhat/article/details/78910921 数组和指针向来就是傻傻分不清,当他们一起出现的时候就更加懵逼. 1 解析不同变量之间的区别: 数组名a: 数组名可以作为数组第一个元素的指针.我们由数组和指针的关系知道,a代表这个地址数值,它相当于一个指针,指向第一个元素(&a[0]),即指向数组的首地址.数组中的其他元素可以通过a的位移得到,此时的进阶是以数组中单个的元素类型为单位的,即a+i= & a[i

关于C语言取地址运算符”&“

关于C语言地址.取地址运算符"&" 2015-04-14  青岛  张俊浩 今天在论坛贴吧看到关于C语言运算符"&"的问题,因为之前自己学C语言时也遇到这个问题,就整理一下思路回帖,也顺便整理成一篇博客~ 问题如下: int a; scanf("%d",&a); 我们老师讲,&是取地址符,但是我就奇怪,为什么叫取地址? 我们明明是想知道a是多少,而不是说它在哪,地址不是形容一个事物在哪吗?我输个10,a就是10了.

对数组名取地址

int a[5]={1,2,3,4,5}; int b[100]; 一个数组名代表的是数组中第一个元素的位置,通过数组名我们可以访问数组,先看下面两个问题 问题一:看到一篇文章这么写的..int array[10];int (*ptr)[10];ptr=&array;//这里说明&array是指向数组的指针,但为什么&array是指向数组的指针?答一:对数组名取地址在C标准里面是未定义的行为.由于数组名是右值,而&操作符要求操作数具有具体的内存空间,换言之就是一个变量,因此

终于懂了:Delphi的函数名不是地址,取地址必须遵守Object Pascal的语法(Delphi和C的类比:指针、字符串、函数指针、内存分配等)good

这点是与C语言不一样的地方,以前我一直都没有明白这一点,所以总是不明白:函数地址再取地址算怎么回事? ---------------------------------------------------------------------------------------------------------------- 在学习Delphi的时候,一个很好的建议是和C/C++去类比着学习,从指针,到内存管理,到数组,到面向对象……各个方面,都是有很多可以相似和或者也有不同的方,类比着学习,一

数组名和数组名取地址的区别

数组名和数组名取地址的区别 以下代码会打印出什么样的日志呢? [cpp] view plaincopy #include <stdio.h> int a[2] = {1,2}; int main(){ printf("a = %p\n", a); // I printf("&a = %p\n", &a); // II printf("a + 1 = %p\n", a + 1);// III printf("&

C语言中对数组名取地址

在C/C++中,数组名相当于一个指针,指向数组的首地址.这里"相当于"不代表等于,数组名和指针还是有很多区别的,这个在<C陷阱与缺陷>里有详尽的讲述.而这里要说的是对于数组名取地址的这么一个操作. 如果声明有如下数组: int arr[5]; 那么,&arr这个操作得到了什么值呢? 如果简单的认为arr就是一个指向数组首地址的指针的话,那么很自然会想到&arr得到的是一个指向存放arr这个指针的指针,也就是一个二级指针,然而事实却并不是这样. 观察以下代码:

浅谈C/C++数组取地址

本文讲的是关于C/C++数组取地址一些基本的概念,但是新手可能会在学习相关内容时产生一定的困惑,希望本文能帮助到你. 我们先来看以下一段代码: 1 #include<iostream> 2 using namespace std; 3 int main(){ 4 int array[6] = { 1,2,3,4,5,'\0'}; 5 cout<<array<<endl; 6 cout<<&array<<endl; 7 return 0;

C编译器剖析_6.3.6 汇编代码生成_为“取地址”产生汇编指令

6.3.6  为"取地址"产生汇编指令 在这一小节中,我们来讨论一下以下两条中间指令的翻译: (1)取地址指令<ADDR,DST,SRC1,NULL> 例如 <ADDR,t0,  number, NULL>,表示取number的地址并保存到临时变量t0中 (2)对象清零指令< CLR,DST,SRC1,NULL> 例如<CLR,arr,16,NULL>,表示把arr所占16字节的内存清零 我们先举一个例子来说明,对于图6.3.14第4行局

数组名的地址,和数组名取地址的讨论

这个问题的发现是在以下的代码中发现的: #include<stdio.h> int main() {     int arr[2]={1,2};     printf("%p",arr);     printf("%p",&arr);     return 0; } 在运行之后我们发现的数组名本身的地址和数组名内部存储的地址是完全一样的,我们把数组名理解为一个const的指针(数组名只能作为右值,而不是左值),而&arr到底是什么? 我尝