august 发表于 2008-5-25 20:29:37

又来个指针地址问题


#include <stdio.h>

int main(void)
{
    int a={
      
            {{1,2,3},{4,5,6}},
            {{7,8,9},{10,11,12}},
    };
int (*p);
p=a;
printf("%x\t",p-a);
}

为什么打印出来的是4呢,我把它们分开打印的时候,一个地址是12ff80,一个是12ff50 相减就是30,但这里打印出来是4请问为啥呢?

lovehui 发表于 2008-5-26 23:13:54

三维数组以前没有怎么研究过~~~
指针相减根据的是基类型,一维数组指针基类型是整型数值,二维是整型指针,三维应该就是个一维数组了
完全是我自己想的,也想听听高手的解释

august 发表于 2008-5-27 02:43:28

已经大概知道了,
指针相减的规则:
( (char*)pAddr1 - (char*)pAddr2 ) / sizeof(type)
2*2*3的数组,假设p的地址为0x22ff70h;a的地址应为0x22ff40h
p本身就是一个指针,指向p这个类型,这个类型也是一个指针,
它这些一个三位数组a;
上述语句与下面的语句类似:
printf("%d\\n",((char*)p - (char*)a) / sizeof(p));
就是这样
页: [1]
查看完整版本: 又来个指针地址问题