指向输出错误值的数组的指针的指针?

时间:2019-02-11 00:08:29

标签: c++

我的代码输出的值为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,所以我很困惑。

2 个答案:

答案 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}}个元素。