幻想森林

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2804|回复: 2

[通用编程] 又来个指针地址问题

[复制链接]

313

主题

1574

帖子

1万

积分

⑧专业

*永恒国度*

积分
14145
QQ
发表于 2008-5-25 20:29:37 | 显示全部楼层 |阅读模式
  1. #include <stdio.h>
  2. int main(void)
  3. {
  4.     int a[2][2][3]={
  5.         
  6.             {{1,2,3},{4,5,6}},
  7.             {{7,8,9},{10,11,12}},
  8.     };
  9.   int (*p)[2][3];
  10.   p=a;
  11.   printf("%x\t",p[2]-a[0]);
  12. }
复制代码
为什么打印出来的是4呢,我把它们分开打印的时候,一个地址是12ff80,一个是12ff50 相减就是30,但这里打印出来是4请问为啥呢?
[img][/img] http://shop33698673.taobao.com被别人嫉妒,证明你优秀,嫉妒别人说明你无能
回复

使用道具 举报

2

主题

16

帖子

178

积分

③业余

积分
178
QQ
发表于 2008-5-26 23:13:54 | 显示全部楼层
三维数组以前没有怎么研究过~~~
指针相减根据的是基类型,一维数组指针基类型是整型数值,二维是整型指针,三维应该就是个一维数组了
完全是我自己想的,也想听听高手的解释
要为你做不可能的事~~~
回复 支持 反对

使用道具 举报

313

主题

1574

帖子

1万

积分

⑧专业

*永恒国度*

积分
14145
QQ
 楼主| 发表于 2008-5-27 02:43:28 | 显示全部楼层
已经大概知道了,
指针相减的规则:
( (char*)pAddr1 - (char*)pAddr2 ) / sizeof(type)
2*2*3的数组,假设p[2]的地址为0x22ff70h;a[0]的地址应为0x22ff40h
p[2]本身就是一个指针,指向p[n1][n2]这个类型,这个类型也是一个指针,
它这些一个三位数组a[3];
上述语句与下面的语句类似:
printf("%d\\n",((char*)p[2] - (char*)a[0]) / sizeof(p[0][0]));
就是这样
[img][/img] http://shop33698673.taobao.com被别人嫉妒,证明你优秀,嫉妒别人说明你无能
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|幻想森林

GMT+8, 2024-5-6 11:40 , Processed in 0.024938 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表