游戏开发论坛

 找回密码
 立即注册
搜索
楼主: 千里马肝

C++新版开张,请大家踊跃发言!

[复制链接]

135

主题

3447

帖子

3800

积分

论坛元老

总版主

Rank: 8Rank: 8

积分
3800
QQ
发表于 2006-10-23 13:26:00 | 显示全部楼层

Re:C++新版开张,请大家踊跃发言!

UP

7

主题

42

帖子

42

积分

注册会员

Rank: 2

积分
42
发表于 2006-10-23 13:38:00 | 显示全部楼层

Re:C++新版开张,请大家踊跃发言!

公布一下答案吧。
我也不理解了。&array有意义啊,就是array的地址
&array+1就是array地址值+1,我不理解的是int *p = (int *)(&array+1)后,
p的地址怎么就变成array数组后面的地址了(就是array地址+20的值)

7

主题

42

帖子

42

积分

注册会员

Rank: 2

积分
42
发表于 2006-10-23 13:41:00 | 显示全部楼层

Re:C++新版开张,请大家踊跃发言!

又是个考内存布局的题

248

主题

2674

帖子

2702

积分

金牌会员

Rank: 6Rank: 6

积分
2702
QQ
发表于 2006-10-23 13:42:00 | 显示全部楼层

Re:C++新版开张,请大家踊跃发言!

我也要当斑竹

16

主题

404

帖子

404

积分

中级会员

Rank: 3Rank: 3

积分
404
发表于 2006-10-23 14:14:00 | 显示全部楼层

Re:C++新版开张,请大家踊跃发言!

先顶一下马肝老师了!早都应该开C++版了。

8

主题

716

帖子

716

积分

高级会员

Rank: 4

积分
716
 楼主| 发表于 2006-10-23 14:26:00 | 显示全部楼层

Re:C++新版开张,请大家踊跃发言!

2005会报错......

18

主题

971

帖子

982

积分

高级会员

Rank: 4

积分
982
发表于 2006-10-23 14:32:00 | 显示全部楼层

Re:C++新版开张,请大家踊跃发言!

cout << *(p -- 1 ) << endl;
==================
p--1是啥啊?是p-1还是p--1?又或是p--?,如果是p--1应该会报错吧…
&array就是数组array的首地址…&array+1得到的应该是array[1]的地址,如果是p-1的话,应该最后还是得到array[0]的值吧…

38

主题

275

帖子

281

积分

中级会员

Rank: 3Rank: 3

积分
281
QQ
发表于 2006-10-23 14:37:00 | 显示全部楼层

Re:C++新版开张,请大家踊跃发言!

    5楼公开答案~~~:
    首先,需要说明的是: array 代表的地址,其实就是 array 在内存中的地址!---意即,若 array = 0x12fec4 , 那么 &array = 0x12fec4 ---这其实不是什么希奇事,自己编译器里try一下就知道了。
    然后,需要知道 &array 返回的是什么?  这可以这样对比:int var;  &var 返回的是什么----它返回的是一个 (int*)型的指针。同理, &array 返回的是什么呢? 返回的是一个整形数组类型指针!“整形数组类型”!即  (int[5] *) ----呵呵,这种形式的表达当然不存在,这里只是一种帮助你理解的方式。  那么, 我们知道对于一个 int 类型的指针,当给其加 1 时,其地址增加 4, 那么同理,对于一个 整形数组指针加 1 时---这里是包含5个元素的整形数组指针----其地址就增加 4 * 5 个字节!
   我觉得其实这是个语言缺陷!我觉得更好的方式应该这样:
   struct  MyINT
  {
        int  m_data[5];
  }
  所以在JAVA里数组定义为  int [5]  array;也是很有道理的! 即:它引导程序员把 int [5] 这个整体看成一种数据类型!

   因此:int *p = (int*)( &array + 1 ); p 就指向了 array + 5 的地方。
           *(p - 1 )  就取了 array + 4  这个内存地址里的内容!

  答案是5。

  (汗~~希望偶说清楚了~总而言之, int *p = (int*)( &array + 1 ); 中的 1 就表示了 5 个 int 的长度~)

8

主题

716

帖子

716

积分

高级会员

Rank: 4

积分
716
 楼主| 发表于 2006-10-23 14:38:00 | 显示全部楼层

Re:C++新版开张,请大家踊跃发言!

楼上的客气了

如果源码没错
array的index被加了2次
不就正好是3么

算了,此题无讨论价值
任何程序写出这种代码都应该受宫刑的,出题的人凌迟
建议大家提出些有意义的问题一起讨论

8

主题

716

帖子

716

积分

高级会员

Rank: 4

积分
716
 楼主| 发表于 2006-10-23 14:42:00 | 显示全部楼层

Re:C++新版开张,请大家踊跃发言!

受教,我终于看懂了......
PS,你前面的code里是(p--1),有两个-号
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-25 18:11

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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