Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.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 从函数发送指针_C_Variables_Pointers_Parameter Passing - Fatal编程技术网

C 从函数发送指针

C 从函数发送指针,c,variables,pointers,parameter-passing,C,Variables,Pointers,Parameter Passing,这正是我想知道的。 好了, 假设我在一个函数中声明一个变量,我将这个变量作为指向另一个函数的指针传递。 当第一个函数(声明变量的地方)结束时,这个变量会发生什么? 它是留在堆栈上还是在函数结束时被删除 当第一个函数结束时,变量将被销毁,指针将无效。当第一个函数结束时,变量将被销毁,指针将无效。当定义变量的函数返回变量时,变量将被销毁,除非您将其声明为静态。检查C中的存储类。这里有一个指针:当定义变量的函数返回时,该变量将被销毁,除非声明为静态。检查C中的存储类。这里有一个指针:如果您在堆栈上声明

这正是我想知道的。 好了, 假设我在一个函数中声明一个变量,我将这个变量作为指向另一个函数的指针传递。 当第一个函数(声明变量的地方)结束时,这个变量会发生什么? 它是留在堆栈上还是在函数结束时被删除


当第一个函数结束时,变量将被销毁,指针将无效。

当第一个函数结束时,变量将被销毁,指针将无效。

当定义变量的函数返回变量时,变量将被销毁,除非您将其声明为静态。检查C中的存储类。这里有一个指针:

当定义变量的函数返回时,该变量将被销毁,除非声明为静态。检查C中的存储类。这里有一个指针:

如果您在堆栈上声明了此变量,它将取消:

void foo()
{
    int varInStack;
    foo2(&varInStack);

    // when foo returns, you loosed your variable.
}
你可以把它退回:

int foo()
{
    int varInStack;
    foo2(&varInStack);

    return varInStack;
}

如果您在堆栈上声明了此变量,它将取消:

void foo()
{
    int varInStack;
    foo2(&varInStack);

    // when foo returns, you loosed your variable.
}
你可以把它退回:

int foo()
{
    int varInStack;
    foo2(&varInStack);

    return varInStack;
}

它取决于变量的存储说明符。它取决于变量的存储说明符。但是返回它并不能防止指针悬空。一旦函数返回,任何指向局部变量的指针都无效。答案不同。那么从本地作用域返回它会破坏指针吗?@Davey:no。指针仍然存在;它只是指向FSM知道一旦变量被销毁在哪里。@cHao当然,这是我写的第一个例子,你松开了变量。在第二个示例中,我展示了如何获取变量value@Davey这里没有指针。我声明了一个int变量,而不是指针。现在,我使用它从
foo2()
中获取一个值。当我从
foo()
返回它时,堆栈中有一个它的副本,您可以获得它。在
foo()
中声明的原始变量丢失,但是您有一个返回的copyreeting,它不能防止指针悬空。一旦函数返回,任何指向局部变量的指针都无效。答案不同。那么从本地作用域返回它会破坏指针吗?@Davey:no。指针仍然存在;它只是指向FSM知道一旦变量被销毁在哪里。@cHao当然,这是我写的第一个例子,你松开了变量。在第二个示例中,我展示了如何获取变量value@Davey这里没有指针。我声明了一个int变量,而不是指针。现在,我使用它从
foo2()
中获取一个值。当我从
foo()
返回它时,堆栈中有一个它的副本,您可以获得它。
foo()
中声明的原始变量丢失,但您有一个返回的副本