整数由C中的函数返回的值

时间:2015-10-02 06:36:41

标签: c function integer output

我有一个像这样的C程序

$scope.addList = function(task,subtask){
  subtask.checked= !(subtask.checked);
  var data = {
    "task_id": task._id,  // Updated key name based on your required output
    "subTaskName": subtask.subTaskName,
  };
  if(subtask.checked){
    selectedMap.push(data); // Add data object in array instead of key value pair    
  } else {
    selectedMap = selectedMap.filter(function(obj) {
          return (obj.task_id !== data.task_id && obj.subTaskName !== data.subTaskName);
    });
}

此程序返回的输出是

#include <stdio.h>
void print_int()
{
    int i;
    i++;
    printf("%d\n",i);
}
int main()
{
    print_int();
    print_int();
    return 0;
}

我对此输出有疑问。难道这不是两个垃圾值,因为变量i没有被初始化吗?

2 个答案:

答案 0 :(得分:2)

您正在获得未定义的行为。

变量i可能在每次调用时都位于相同的物理内存位置,它恰好在启动时被清除,并且没有任何东西在那里写垃圾,因此您可以看到这些特定的值。如果您在两次print_int()调用之间调用其他函数,结果可能会有所不同。

那只是&#34;运气&#34;当然,这个程序已经破了。

答案 1 :(得分:1)

未初始化的本地非静态变量的值是不确定,使用它时它仍然未初始化导致未定义的行为。有时它似乎可以工作,但实际上并非如此。

但是你的案子很容易解释。局部变量i必须占用一些内存位置。恰好在首次调用函数时,内存位置包含0。下次调用该函数时,它将位于同一位置。不应该依赖此行为,未定义的行为仍然是未定义的行为。