|
|
发表于 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 的长度~)
|
|