以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 C/C++编程思想 』  (http://bbs.xml.org.cn/list.asp?boardid=61)
----  荤菜求助:指向二维数组的指针问题2  (http://bbs.xml.org.cn/dispbbs.asp?boardid=61&rootid=&id=47233)


--  作者:荤菜
--  发布时间:5/20/2007 9:27:00 PM

--  荤菜求助:指向二维数组的指针问题2

/*输出p的地址输出a[0]的地址,然后相减打印出结果*/
main()
{static int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};
int *p;
for(p=a;p<a[0]+12;p++)
printf("%d-%d=%d ",p,a[0],(p-a[0]));  /*假如p=3,a[0]=1,p-a[0]=1,结果我不明白*/
getch();
}
--  作者:一分之千
--  发布时间:5/21/2007 10:54:00 AM

--  
这个问题根你前边的问题就说明一个问题,你对于这个地址值和变量值根本没有分清楚

为什么等于1在前边我已经解释过了,对于这个问题你可以进行这样一个小改动,应该就比较明白原因了

#include "stdio.h"
#include "conio.h"

void main()
{
 static int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};
 int *p;
 for(p=a[0];p<a[0]+12;p++)
  printf("%d-%d=%d ",p,a[0],(int(p)-int(a[0])));  /*假如p=3,a[0]=1,p-a[0]=1,结果我不明白*/
 getch();
}


--  作者:一分之千
--  发布时间:5/21/2007 11:01:00 AM

--  
还有一个问题就是你到底是想输出地址值还是变量值,如果是输出变量值的话你写的程序就完全的错了,应该这样写
#include "stdio.h"
#include "conio.h"

void main()
{
static int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};
int *p;
for(p=a[0];p<a[0]+12;p++)
  printf("%d-%d=%d ",*p,*a[0],*p-*a[0]);  /*假如p=3,a[0]=1,p-a[0]=1,结果我不明白*/
getch();
}


--  作者:一分之千
--  发布时间:5/21/2007 11:03:00 AM

--  
通过这两个程序的比较应该能比较清除的明白变量值和地址值的关系了吧?
--  作者:荤菜
--  发布时间:5/21/2007 10:25:00 PM

--  
谢谢,我看了第一个回答后我是这样认为的:printf中的p,a[o],是地址,而p-a[0]是p变量和a[0]变量本身相减
--  作者:荤菜
--  发布时间:5/24/2007 1:21:00 PM

--  
问题补充:那为什么我在tc编译下的p的地址相差2,在devcpp编译下的地址相差4,不是整型的数据在内存中占的地址都为2个字节吗?
还有在这个程序中为什么只能用p-a[0],而不能用p+a[0],用p+a[0]算不出来,哪怕是错的.


[此贴子已经被作者于2007-5-25 19:37:20编辑过]

W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
6,230.469ms