📜  如何从C中的函数返回指针

📅  最后修改于: 2021-05-28 02:11:20             🧑  作者: Mango

C编程语言中的指针是一个变量,用于存储另一个变量的内存地址。我们可以将指针传递给函数,也可以从函数返回指针。但是不建议在函数外返回局部变量的地址,因为它在函数返回后超出范围。

程序1:

下面的程序将给出分段错误,因为“ A”是该函数的局部变量:

C
// C program to illustrate the concept of
// returning pointer from a function
#include 
  
// Function returning pointer
int* fun()
{
    int A = 10;
    return (&A);
}
  
// Driver Code
int main()
{
    // Declare a pointer
    int* p;
  
    // Function call
    p = fun();
  
    printf("%p\n", p);
    printf("%d\n", *p);
    return 0;
}


C
// C program to illustrate the concept of
// returning pointer from a function
#include 
  
// Function that returns pointer
int* fun()
{
    // Declare a static integer
    static int A = 10;
    return (&A);
}
  
// Driver Code
int main()
{
    // Declare a pointer
    int* p;
  
    // Function call
    p = fun();
  
    // Print Address
    printf("%p\n", p);
  
    // Print value at the above address
    printf("%d\n", *p);
    return 0;
}


输出:
以下是上述程序的输出:

解释:

这种情况下的主要原因是,编译器始终为函数调用生成堆栈。一旦函数退出,函数堆栈也将被删除,这将导致函数的局部变量超出范围。

静态变量具有保留其值的属性,即使它们超出其范围也是如此。因此,要执行从C中的函数返回指针的概念,必须将局部变量定义为静态变量。

程式2:

C

// C program to illustrate the concept of
// returning pointer from a function
#include 
  
// Function that returns pointer
int* fun()
{
    // Declare a static integer
    static int A = 10;
    return (&A);
}
  
// Driver Code
int main()
{
    // Declare a pointer
    int* p;
  
    // Function call
    p = fun();
  
    // Print Address
    printf("%p\n", p);
  
    // Print value at the above address
    printf("%d\n", *p);
    return 0;
}
输出:
0x601038
10

想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。