![](/img/trans.png)
[英]Why are the outputs of this C code different when formatting with %c and %d
[英]why does this C code outputs 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概念,指针和所有事物的新手。
评估k[8]
是不确定的行为 ,因为k
仅包含8个元素,而不是9个元素。
关于不确定行为的后果争论不休。 什么事情都可能发生。 您的程序格式不正确。
(请注意,它甚至会是不确定的行为,以评估k[0]
,..., k[7]
因为它们是未初始化的 ,你必须给他们写第一,或初始化数组,如int k[8] = { 1, 2 };
)
这是声明的数组的最后一个元素之后的内存位置中的值。
如果您在一周内再次运行此代码,则可能是42或当前存储在此特定内存地址上的任何其他内容。 在这种情况下,也可能出现分段错误。
您正在跳出数组k的边界。
要访问k的最后一个元素,请尝试使用function_math(k, 7)
该数组也未初始化,因此其中的值将是不确定的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.