有什么理由吗:
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 概念、指针和一切的新手。
有什么理由吗:
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 概念、指针和一切的新手。
评估是未定义的行为k[8]
,因为k
只有 8 个元素,而不是 9 个。
没有必要争论未定义行为的后果。什么事情都可能发生。您的程序格式不正确。
k[0]
(请注意,评估, ...,甚至是未定义的行为k[7]
,因为它们是未初始化的。您必须先写入它们,或初始化数组,例如 。 int k[8] = { 1, 2 };
)
这是位于声明数组的最后一个元素之后的内存位置的值。
如果您在一周内再次运行此代码,它可能是 42 或此时存储在此特定内存地址上的任何其他内容。在这种情况下,也可能出现分段错误。
您正在超出数组 k 的范围。
要访问 k 的最后一个元素,请尝试使用function_math(k, 7)
数组也没有初始化,所以里面的值是未定义的。