为什么这个C代码输出1

时间:2012-09-30 23:32:37

标签: c computation

有什么理由:

void function_foo(){
    int k[8];
    function_math(k, 8);
}

void function_math(int *k, int i){
    printf("value: %d", k[i]);
}

主执行function_foo();

输出为1?矩阵k的元素没有初始化。 也许在内存中有int长度的东西?

我是C概念,指针和所有内容的新手。

3 个答案:

答案 0 :(得分:7)

评估k[8]未定义的行为,因为k只有8个元素,而不是9个。

没有必要争论未定义行为的后果。什么事情都可能发生。你的程序格式不正确。

(请注意,评估k[0],...,k[7]甚至是未定义的行为,因为它们未初始化。您必须先写信给他们,或者初始化数组,例如int k[8] = { 1, 2 };。)

答案 1 :(得分:2)

这是在声明的数组的最后一个元素之后的内存位置的值。

如果您再次在一周内运行此代码,则可能是42或此时存储在此特定内存地址上的任何其他内容。在这种情况下,也可能出现分段错误。

答案 2 :(得分:0)

你正走出数组k的界限。

要访问k的最后一个元素,请尝试使用function_math(k, 7)

数组也未初始化,因此内部的值将是未定义的。