C语言函数返回值解析,详解C语言函数返回值解析.pdf

详详解解C语语言言函函数数返返回回值值解解析析

详详解解C语语言言函函数数返返回回值值解解析析

程程序序一一::

int main()

{

int *p;

int i;

int*fun(void);

p=fun();

for(i=0;i<3;i++)

{

printf("%d\n",*p);

p++;

}

return 0;

};

int* fun(void)

{

static int str ]={1,2,3,4,5};

int*q=str;

return q;

}

//不能正确返回

虽然str是在动态变量区,而该动态变量是局部的,函数结束 不保留的。

程程序序二二::

int main()

{

char *p;

char*fun(void);

p=fun();

printf("%s\n",p);

return 0;

};

char * fun(void)

{

char *str="hello";

return str;

}

//可以正确返回

但是,字符串"hello"不是变量,而是一个常量,编译程序在处理这种常量 ,通常把它放在了常量区中。而常量区则是始终存在

的。

后一个例子中函数fun的返回值就是一个指向这种常量区的指针。

函数返回指针,要使主程序可以使用这个指针来访问有意义的数据,关键就是要保证在使用这个指针值的 候,该指针所指向的

地方的数据仍然有意义。

还有,如果指针是指向函数的指针,那么这个指针就是指向程序代码区的。这也是一种应用的情况。

另外,如果明白了它的原理,程序员还可以发明出一些其他灵活的使用方法,当然,那都属于“怪”方法,一般不提倡的。

程程序序三三::

int main()

{

int a,b;

int max;

int fun (int a,int b);

scanf("%d%d",&a,&b);

max=fun (a,b);

printf("\n%d\n",max);

return 0;

};

//

int fun(int a,int b)

{

int max;

if(a>b)

max=a;

else

max=b;

return max;

}

//可以正确返回

程程序序三三::

这个例子中,返回的不是变量max 的地址,返回的是它的值。

return后面的东西,看做一个表达式,返回的是这个表达式的值。

例如,入口如果a是3,b是5,则此 (执行return语句 )max里面存的是5 。而return语句的功能就是把max里面的5取出来,

放到“返回值寄存器”中。

主程序是从“返回值寄存器”得到这个5的 (此 max变量已经不存在了)。

你前面的第二个例子中,同样,指针变量str在函数结束后已经不存在了。但是在return语句中,把指针变量str里面的值 (等于字

符串"hello"存放处的地址)送到“返回值寄存器”中了。

动态变量str不存在了,但常量区中的字符串"hello"还存在。主程序根据返回的地址就可以找到该字符串。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值