繁体   English   中英

为什么此C代码输出1

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM