本帖最后由 类人猿 于 2017-8-28 14:14 编辑  
| <<<<<<<<技术探讨,欢迎大神指导!<<<<技术Q:578052137 技术群:128262077 |  
  
关于TC数组内存官方并没有详细的分析数组指针。因为TC里面数组不是真正的数组而应该是个数据结构,说到这里可能同学们又晕了。 
首先我们先看下TC数组的构成,下面以整数作为例子。 
 
 
   var Array = array(1,2,3,4) 
   这里数组的每一个元素都是整数型,TC里面每个元素整数默认是4个字节。 
   Array[0]=1 
   Array[1]=2 
   Array[2]=3 
   Array[3]=4 
比如Array[0]的地址是0x28588F0,那么Array[1]的指针就是+4后的0x28588F4,其他的以此类推。 
这个是程序的逻辑,但是在TC里面是否这样呢?我们直接看下面代码: 
 
 
 function 按钮0_点击() 
    var Array  = array(1,2,3,4) 
    var Addr1=varaddress(Array[0]) 
    Addr1=strformat("%x",Addr1) 
    traceprint(Addr1)  
     
    var Addr2=varaddress(Array[1]) 
    Addr2=strformat("%x",Addr2) 
    traceprint(Addr2)   
end 
 
 
 
我们发现Array[0]和Array[1]他们不是相差0x4,而是相差0x1E0,为什么呢?应为在TC里面一个整数变量也是个结构来的,这个是TC工程师设定的我们也不要去追究了。 
 
 
问题来了,那我们在分析程序或者游戏的时候应该怎么办呢? 
PC端的程序一般都是用C语言进行编写,数组内存地址Array[0]和Array[1]内存地址肯定是相差4的。但是变量类型很多,具体情况还得具体分析的 
 
 
这里就是给大家一个提醒,希望能起到抛钻引钰的作用。想用TC玩内存就要先了解TC自身内存形式。 
 
 
 |