以文本方式查看主题

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


--  作者:荤菜
--  发布时间:5/24/2007 1:25:00 PM

--  荤菜求助:指针老问题
/*输出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();
}
问题补充:还有为什么我在tc编译下的p的地址相差2,在devcpp编译下的地址相差4,不是整型的数据在内存中占的地址都为2个字节吗?
还有在这个程序中为什么只能用p-a[0],而不能用p+a[0],用p+a[0]算不出来.
--  作者:一分之千
--  发布时间:5/24/2007 2:01:00 PM

--  
整形占几位取决于你所使用的编译器不同以及你机器为16 32 或者64位的不同而有所不同
后边一个问题,你想算什么东西???地址值的加和??
--  作者:荤菜
--  发布时间:5/25/2007 7:25:00 PM

--  
我只是单纯的好奇,我不明白为什么减法可以,一用加法就提示出错.
--  作者:荤菜
--  发布时间:5/25/2007 7:35:00 PM

--  
第2个问题应这样问:为什么用p+a[0]算不出结果,哪怕是错的.

--  作者:卷积内核
--  发布时间:5/26/2007 8:11:00 AM

--  
 static int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};
 int *p;
 for([color=#FF0033]p=a[0];[/color]p<a[0]+12;p++)//-----p要指向a的首地址!!
  printf("%d-%d=%d ",p,a[0],(p-a[0]));

“还有为什么我在tc编译下的p的地址相差2,在devcpp编译下的地址相差4,不是整型的数据在内存中占的地址都为2个字节吗? ”---------字符存储要按照数组对齐,编译器不同对齐方式也不一定相同。
“假如p=3,a[0]=1,p-a[0]=1,结果我不明白”---------p直接打印是p的内存地址,怎么会简单的像你说的=3呢?你还是没弄明白指针是什么东西。



此主题相关图片如下:
按此在新窗口浏览图片


--  作者:荤菜
--  发布时间:5/26/2007 3:07:00 PM

--  
呵呵,我的确把指针搞糊涂了,谢谢啊
--  作者:huochai2008
--  发布时间:6/18/2007 1:49:00 PM

--  

--  作者:yjtawfg
--  发布时间:6/21/2007 12:12:00 PM

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