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基础课程》。