VBGood网站全文搜索 Google

搜索VBGood全站网页(全文搜索)

VB爱好者乐园(VBGood)

 找回密码
 立即注册
搜索
楼主: VBProFan

一个令人疯掉的C指针问题,不是搞编译器的绝对想不到

[复制链接]
发表于 2010-5-26 22:47:41 | 显示全部楼层
8# VBProFan

a已经是指针类型(C里面数组如果只写一个变量名的话就是指针类型)了,你还要取地址……
回复 支持 反对

使用道具 举报

发表于 2010-5-26 22:50:37 | 显示全部楼层
另外VC6那个“”图标是你自己设置的?……
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-5-27 09:55:27 | 显示全部楼层
8# VBProFan  

a已经是指针类型(C里面数组如果只写一个变量名的话就是指针类型)了,你还要取地址……
acme_pjz 发表于 2010-5-26 22:47
一样,没影响.JPG
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-5-27 10:13:32 | 显示全部楼层
另外VC6那个“”图标是你自己设置的?……
acme_pjz 发表于 2010-5-26 22:50


关闭工程按钮.JPG
回复 支持 反对

使用道具 举报

发表于 2010-5-27 13:18:10 | 显示全部楼层
14# VBProFan

我把VC6的部分图标导到VB6了……VB6有个nasty bug:图标至多只支持16色……
回复 支持 反对

使用道具 举报

发表于 2010-5-27 13:20:23 | 显示全部楼层
另外我觉得a,b,c的内存顺序,不同编译器应该不一样……
回复 支持 反对

使用道具 举报

发表于 2010-5-28 08:10:22 | 显示全部楼层
问题1:为什么 Debug 版本的内存分配是 6 在前,7 在后?
DEBUG版为了调试器的原因,不知道设计员的想法是什么,也不想钻这个牛角

问题2:&a + 1 转成指针类型后为什么指向整个数组的末尾而不是指向 &a 的下一个字节?
学习中,还不清楚。。。现在比较头痛的是 &, **, void **, *&, &*, ...

问题3:Release 版本中的内存分配又如何?为什么得到那个结果?
RELEASE是根据一定的优化设置处理(可能会引起BUG)钻牛角研究的话建议不要用DEBUG和RELEASE版。用无优化无调试的版本比较接近真实的“原始”编译。RELEASE后优化的编译根据一定的权重提前或临时处得某些内容。不好追究原因
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-6-1 14:50:39 | 显示全部楼层
刚才用 TC2.1 的编译器试了一下,结果是6. 而 VC6 依然是7.
TC2.JPG
回复 支持 反对

使用道具 举报

发表于 2010-6-1 16:45:14 | 显示全部楼层
本帖最后由 戒禁之魂 于 2010-6-1 16:52 编辑
  1. 好像讲二维数组的时候有讲,如果不转型的话,就是:
  2. int (*ptr)[5]=&a;

  3. ptr是int [5]的指针,解除引用后就可以当成int [5]来用了:
  4. for (int i=0;i<5;i++)
  5.         cout<<(*ptr)[i];//这里的【i】总是被论坛吞掉……

  6. 还有一种比较诡异的方法:
  7. for (int i=0;i<5;i++)
  8.         cout<<*((*ptr)+i);

  9. &a+1的话就相当于ptr[1],&a+2就是ptr[2](就成二维数组了)
  10. &a+1==ptr[1]==&ptr[1][0]==a[5](只是从数值上来说,类型有差异)
  11. 不过a[5]究竟在前面还是后面就和编译器实现有关

  12. 这是c++的,不知道c是不是一样。
复制代码

评分

参与人数 1威望 +8 收起 理由
VBProFan + 8 精品文章

查看全部评分

回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-6-3 15:50:11 | 显示全部楼层
这里的【i】总是被论坛吞掉……


呵呵,被解析为 BBCode 的斜体标签了,点“更多设定”、“禁用BB代码”,或直接写在 code 标签内就可以了。

精品文章,我好好体会一下
回复 支持 反对

使用道具 举报

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

本版积分规则

文字版|手机版|小黑屋|VBGood  

GMT+8, 2023-3-22 04:00

VB爱好者乐园(VBGood)
快速回复 返回顶部 返回列表