这个问题有点怪, 那 pointer 指针又是指向前几个字节呢?
不同类型的指针指的都是同一内存空间, 只是具体操作的时候, 把它当成什么来操作.

解决方案 »

  1.   

    pointer总是指向那16个字节中的最低地址的字节,也就是第一个字节。因为指针类型是PWORD,所以你使用中电脑总是取前2个字节,你要把它转换成PLONG,使用中就会取前4个字节。你要是转换成一个有20字节的数组,那就会取20个字节,不过这样就会引起访问越界。
      

  2.   

    1、数据的类型,决定内存的区域大小;
    2、指针指向某类型的变量,只能引导该变量的有效区域;因而,用AllocMem申请了一段16个字节内存,定义一个pointer 指针指向它,如果转换指针类型为PWord,那么转换后的指针的指向只能引导内存的前两个字节。 
      

  3.   

    明白了,另外再问一下这样的情况,AllocMem申请的16个字节内存,指针P为pointer,指向第一个字节,M为inc(pword(P),16)指向最后一个字节,假如现在另外有一个指针A,我要判断是否在这段内存地址之内,是cardinal(P)<cardinal(A)<cardinal(M)还是cardinal(M)<cardinal(A)<cardinal(P)?
      

  4.   


    当然是cardinal(P)<cardinal(A)<cardinal(M),因为地址总是由低到高的。 指针的内容其实就是数据的内存地址。
    注意:inc(PWord(P)), P中的地址值其实是加2,不是加1,因为P是指向Word类型的数据,而word类型占2个字节。
    同理Inc(PLOng(p))s是加4.