有什么理由:
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概念,指针和所有内容的新手。
答案 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)
数组也未初始化,因此内部的值将是未定义的。