| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 887 人关注过本帖
标题:一道C难题
只看楼主 加入收藏
ucfhvqdo
Rank: 2
等 级:论坛游民
帖 子:13
专家分:49
注 册:2009-7-20
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:4 
一道C难题
#include"stdio.h"
#include"stdlib.h"
void fun(float *p1,float *p2,float *s)
{
    s=(float *)calloc(1,sizeof(float));
    *s=*p1+*p2++;
}
main()
{
    float a[2]={1.1,2.2},b[2]={10.0,20.0},*s=a;
    fun(a,b,s);
    printf("%5.2f\n",*s);
}

请问这道题的计算过程是怎么算出来的?调试的答案是(1.10)
搜索更多相关主题的帖子: 难题 
2009-07-27 00:20
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:2 
回复 楼主 ucfhvqdo
那个fun其实什么都没干,那个s进去之后,记它指了另一个空间,然后在那里作了手脚(程序还忘了收回分配的空间了……)。出来之后的的s还是以前的s,指着a的。打印的还是a[0]的值——1.10。
2009-07-27 00:56
tinjp
Rank: 5Rank: 5
等 级:职业侠客
帖 子:52
专家分:340
注 册:2006-11-4
收藏
得分:18 
形参s和实参s是两个指针,都指向a,fun中形参s被指向了新的内存区域,又被赋予了新值,但不会影响实参继续指向a,所以输出1.10。
所谓的传址和传值没有区别,传址是将地址赋予形参,传值是将值赋予形参,不管传值还是传址,形参和实参始终是两个不同的变量,只不过传址时他们指向同一个内存区域。
2009-07-27 10:32
mfh
Rank: 6Rank: 6
等 级:侠之大者
帖 子:179
专家分:411
注 册:2009-5-31
收藏
得分:0 
三楼,很有理!
2009-07-27 10:48
ucfhvqdo
Rank: 2
等 级:论坛游民
帖 子:13
专家分:49
注 册:2009-7-20
收藏
得分:0 
回复 3楼 tinjp
果然是高手
2009-07-27 23:09
快速回复:一道C难题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.031764 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved