/*指针在函数的应用*/

/*指针在函数的应用——函数返回数值类型*/

#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)函数返回值为地址,不能返回局部变量的地址(局部变量栈区申请,函数结束自动释放空间),可以返回静态变量和全局变量(全局静态区),堆区变量与常量区地址也可返回。

*/

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值