Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么这个C代码输出1_C_Computation - Fatal编程技术网

为什么这个C代码输出1

为什么这个C代码输出1,c,computation,C,Computation,是否有任何理由: void function_foo(){ int k[8]; function_math(k, 8); } void function_math(int *k, int i){ printf("value: %d", k[i]); } 主执行函数_foo() 输出将为1?矩阵k的元素没有初始化。 可能是内存中长度为int的东西 我不熟悉C的概念、指针和所有东西。计算k[8]是一种未定义的行为,因为k只有8个元素,而不是9个 争论未定义行为的后果没有什

是否有任何理由:

void function_foo(){
    int k[8];
    function_math(k, 8);
}

void function_math(int *k, int i){
    printf("value: %d", k[i]);
}
主执行
函数_foo()

输出将为1?矩阵k的元素没有初始化。 可能是内存中长度为int的东西

我不熟悉C的概念、指针和所有东西。

计算
k[8]
是一种未定义的行为,因为
k
只有8个元素,而不是9个

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

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

计算
k[8]
,因为
k
只有8个元素,不是9

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


(请注意,计算
k[0]
,…,
k[7]
,甚至可能是未定义的行为,因为它们是未实现的。您必须首先对它们进行写入,或者初始化数组,例如
int k[8]={1,2};

您正在跳出数组k的边界

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


数组也没有初始化,因此里面的值将是未定义的。

您正在跳出数组k的边界

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


数组也未初始化,因此内部的值将未定义。

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


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

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



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

I编辑。main执行函数_foo()。@DavidGrayson Eh?函数_math的调用在函数_foo中。@DavidGrayson你不应该从事毫无意义的迂腐行为。这里有四个答案,他们都答对了。标题和文本都指“output”,并且有一个output语句。不需要猜测。“说得更清楚”——已经很清楚了。我编辑过。main执行函数_foo()。@DavidGrayson Eh?函数_math的调用在函数_foo中。@DavidGrayson你不应该从事毫无意义的迂腐行为。这里有四个答案,他们都答对了。标题和文本都指“output”,并且有一个output语句。不需要猜测。“让它更清晰”--它已经足够清晰了。这是因为直到现在内存还没有用任何其他值更新过。@Pier alexandreBouchard Jan说它可能不同,而不是说它会不同。请阅读解释这一点的许多答案。这是因为直到现在内存还没有用任何其他值更新。@Pier alexandreBouchard Jan说它可能不同,而不是说它会不同。请阅读解释这一点的许多答案。即使是从未初始化的变量读取也是未定义的行为。这比读取未定义的值要糟糕得多,甚至从未初始化的变量读取也是未定义的行为。这比读取未定义的值要糟糕得多。如果是未定义的行为,为什么输出总是1?我的意思是,即使我重建并执行了10次,我的输出仍然是1,而不是一个随机数。@Pier alexandreBouchard Undefined可以表示任何东西-包括它总是返回1。@Pier alexandreBouchard:“任何事情都可能发生”的行为包括“总是返回1”。它也可以总是从你的照片收藏中删除一个文件,或者总是点一个比萨饼。呵呵@KerrekSB这让我笑了:)但不要惊慌,操作系统(linux、windows等)会检查你是否试图从程序的内存空间调用一个地址,如果你试图“点比萨饼”,则会关闭程序的指示灯@ JanKoester:在我自己的攻击性的忽略中,这不是真的,我刚刚完成了一个优化的、自我启发的C++编译器。我希望美国宇航局为下一个火星着陆器调试它,因为它运行在非常弱的硬件上。。。在3D中。不管怎样,在上周的一个错误之后,我有一个冰箱装满了备用的比萨饼。如果这是一个未定义的行为,为什么输出总是1?我的意思是,即使我重建并执行了10次,我的输出仍然是1,而不是一个随机数。@Pier alexandreBouchard Undefined可以表示任何东西-包括它总是返回1。@Pier alexandreBouchard:“任何事情都可能发生”的行为包括“总是返回1”。它也可以总是从你的照片收藏中删除一个文件,或者总是点一个比萨饼。呵呵@KerrekSB这让我笑了:)但不要惊慌,操作系统(linux、windows等)会检查你是否试图从程序的内存空间调用一个地址,如果你试图“点比萨饼”,则会关闭程序的指示灯@ JanKoester:在我自己的攻击性的忽略中,这不是真的,我刚刚完成了一个优化的、自我启发的C++编译器。我希望美国宇航局为下一个火星着陆器调试它,因为它运行在非常弱的硬件上。。。在3D中。不管怎样,在上周的一次窃听之后,我有了一个装满备用比萨饼的冰箱。