/*指针在函数的应用——函数返回数值类型*/
#include <stdio.h>
int num0;
int GlobalFun(void)
{
num0++;
return num0;
}
int LocalFun(void)
{
int num1=1;
num1++;
return num1;
}
int StaticFun(void)
{
static int num2=2;
num2++;
return num2;
}
int main()
{
printf("Global=%d ",GlobalFun());
printf("Local=%d ",LocalFun());
printf("Static=%d\n",StaticFun());
printf("Global=%d ",GlobalFun());
printf("Local=%d ",LocalFun());
printf("Static=%d\n",StaticFun());
}
/*编译结果:
Global=1 Local=2 Static=3
Global=2 Local=2 Static=4
*/
/*总结:
函数返回值:可以返回数值(全局变量的值,局部变量的值,静态变量的值)
*/
/*指针在函数的应用——函数返回值为地址*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int num0;
//全局静态区
int *GlobalFun(void)
{
num0++;
return &num0;
}
//栈区
/*int *LocalFun(void)
{
int num1=1;
num1++;
return &num1;
}*/
//全局静态区
int *StaticFun(void)
{
static int num2=2;
num2++;
return &num2;
}
//常量区
char *ConstantFun()
{
char *p="QWER";
return p;
}
//堆区
char *HeapFun()
{
char *q=NULL;
q=malloc(20);
strcpy(q,"qwer");
return q;
}
int main()
{
int *g=NULL,*s=NULL;
g=GlobalFun();
s=StaticFun();
printf("Global=%d ",*g);
//printf("Local=%d ",*LocalFun());
printf("Static=%d\n",*s);
printf("Global=%d ",*g);
//printf("Local=%d ",*LocalFun());
printf("Static=%d\n",*s);
char *c=NULL,*h=NULL;
c=ConstantFun();
h=HeapFun();
printf("Constant=%s\n",c);
printf("Heap=%s\n",h);
}
/*编译结果:
(1)
main.c: In function ‘LocalFun’:
main.c:14:9: warning: function returns address of local variable [-Wreturn-local-addr]
return &num1;
段错误 (核心已转储)
(2)注释局部变量的函数LocalFun()
Global=1 Static=3
Global=1 Static=3
Constant=QWER
Heap=qwer
*/
/*总结:
(1)函数返回值:可以返回数值(全局变量的值,局部变量的值,静态变量的值)
(2)函数返回值为地址,不能返回局部变量的地址(局部变量栈区申请,函数结束自动释放空间),可以返回静态变量和全局变量(全局静态区),堆区变量与常量区地址也可返回。
*/