1

有什么理由吗:

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 概念、指针和一切的新手。

4

3 回答 3

7

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

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

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

于 2012-09-30T23:34:21.590 回答
2

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

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

于 2012-09-30T23:36:01.330 回答
0

您正在超出数组 k 的范围。

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

数组也没有初始化,所以里面的值是未定义的。

于 2012-09-30T23:35:31.893 回答