Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.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
在函数中返回指向calloced int的指针和返回初始化int的地址有什么区别?_C - Fatal编程技术网

在函数中返回指向calloced int的指针和返回初始化int的地址有什么区别?

在函数中返回指向calloced int的指针和返回初始化int的地址有什么区别?,c,C,我对这两种情况之间的差异感兴趣: int *function() { int i = 5; return &i; } 及 有区别吗?如果是这样,有人能解释一下背景中发生了什么吗?是的,有区别。在第一个场景中,整数i被分配到堆栈上,这意味着当函数返回时它将被重用。在第二种情况下,内存是在堆上分配的,在函数调用之外不会被覆盖 int *function() { int *i = calloc(1, sizeof(int)); *i = 5; re

我对这两种情况之间的差异感兴趣:

int *function() {
    int i = 5;

    return &i;
}


有区别吗?如果是这样,有人能解释一下背景中发生了什么吗?

是的,有区别。在第一个场景中,整数i被分配到堆栈上,这意味着当函数返回时它将被重用。在第二种情况下,内存是在堆上分配的,在函数调用之外不会被覆盖

int *function() {
    int *i = calloc(1, sizeof(int));
    *i = 5;

    return i;
}