我的代码输出的值为7339536,这让我发疯了!
当我将数组的大小设为8时,代码会给我输出7339536,但是如果我将数组的大小更改为9,则会正确地将值输出为8。
#include <iostream>
int main () {
int number[8];
number[8]=8;
int *a;
int **b;
a = &number[8];
b = &a;
std::cout<<**b;
return 0;
}
为什么值7335936而不是8?当我将数组大小更改为9时,会正确输出8,所以我很困惑。
答案 0 :(得分:3)
我不确定您对number[8]=8
的打算是什么,但这是错误的。数组number
中只有8个元素,这将尝试设置第九个元素。
此后的一切都将被没收,包括稍后进行类似的尝试以获取所述元素的地址。
请记住,数组的名称是number
,而不是number[8]
;括号是其类型的一部分(即int[8]
)。
是的,我们不写int[8] number;
令人困惑。这主要是出于历史原因,尽管this hypothetical alternative would come with its own problems!
答案 1 :(得分:1)
int d[6]
有六个元素。 0、1、2、3、4、5。由于C和C ++从0
开始计数,与scala
不同;因此,不存在用户定义的d[6]
。因此,当您尝试访问d[6]
时,它会从寄存器中返回垃圾,因为c风格的指针几乎是不合法的。简而言之,type pointer[no_of_elems_declaration]
转换为0 to no_of_elements_declaration - 1
的{{1}}个元素。