本文概述
在C语言中,指针是一个用来存储另一个变量的内存地址的变量。我们可以将指针传递给函数,也可以将指针从函数返回。但不建议在函数返回后返回局部变量的地址,因为它超出了函数的作用域。
程序1:
下面的程序将给出细分错误, 因为’一种’对于该函数而言是本地的:
C
//C program to illustrate the concept of
//returning pointer from a function
#include <stdio.h>
//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中的函数返回指针的概念, 必须将局部变量定义为静态变量。
程序2:
C
//C program to illustrate the concept of
//returning pointer from a function
#include <stdio.h>
//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
评论前必须登录!
注册