| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 590 人关注过本帖
标题:函数传址时出现的问题,求指教
只看楼主 加入收藏
竹溪水凡
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2013-2-27
结帖率:0
收藏
已结贴  问题点数:20 回复次数:5 
函数传址时出现的问题,求指教
#include <stdio.h>
//函数实现功能为统计8个学生的平均分,并返回少于平均分的学生的个数
int fun(float *p,int n,float *ptr_aver)
{
    int i,j,count=0;
    float sum=0,k=0;
    for(i=0;i<n;i++)
    {
        sum+=*p;
        p++;
    }
    k=sum/n;
    *ptr_aver=k;
    for(j=0;j<n;j++)
    {
        if((*p)<(*ptr_aver))
        {
            count++;
            p--;
        }
    }
    return count;
}

void main()
{
    float arr[]={89,87,88,90,85,72,84,79};
    int len=sizeof(arr)/sizeof(float);
    float i=10;
    float *p=&i;
    printf("%d\n%f",fun(arr,len,*p);
}
输出的平均值不是目标值
搜索更多相关主题的帖子: count return include 
2013-03-01 19:37
Susake
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:女儿国的隔壁
等 级:贵宾
威 望:23
帖 子:2288
专家分:6481
注 册:2012-12-14
收藏
得分:4 
kk.

仰望星空...........不忘初心!
2013-03-01 19:44
zt_123321
Rank: 2
等 级:论坛游民
帖 子:11
专家分:15
注 册:2012-11-28
收藏
得分:4 
fun(arr,len,*p)中的*p应该改为p
因为传的是指针,所以只需要给地址就行了
2013-03-01 20:37
pauljames
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:千里冰封
威 望:9
帖 子:1555
专家分:10000
注 册:2011-5-8
收藏
得分:4 
楼主对指针还没有好好理解,数组名的类型跟所含元素的指针是一致的,普通变量不同

经常不在线不能及时回复短消息,如有c/单片机/运动控制/数据采集等方面的项目难题可加qq1921826084。
2013-03-02 08:08
a151141
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:1
帖 子:197
专家分:680
注 册:2012-10-19
收藏
得分:4 
错误以找出,自己先看看,还不理解的话再交流;
#include <stdio.h>
//函数实现功能为统计8个学生的平均分,并返回少于平均分的学生的个数
int fun(float *p,int n,float *ptr_aver)
{
    int i,j,count=0;
    float sum=0,k=0;
    for(i=0;i<n;i++)
    {
        sum+=*p;
        p++;
    }
    k=sum/n;
    *ptr_aver=k;
    for(j=0;j<n;j++)
    {
         p--;
        if((*p)<(*ptr_aver))
        {
            count++;                       /*           这算法有点小错误,将p--移到if语句之前                      */
           
        }
    }
    return count;
}

void main()
{
    float arr[]={89,87,88,90,85,72,84,79};
    int len=sizeof(arr)/sizeof(float);
    float i=10;
    float *p=&i;
    printf("%d\n",fun(arr,len,p));   /*             这少了一个右括号,p前面不应有*,且输出只是一个因此去掉%f           */
}

世界上幸福的事就是抓到一只羊,更幸福的事就是抓到两只羊……
2013-03-02 09:12
梦幻乐园
Rank: 2
等 级:论坛游民
帖 子:62
专家分:87
注 册:2012-10-25
收藏
得分:4 
首先你定义的fun函数里面只有一个返回值,但是你的main函数里面却有两个输出值,数组名不能执行自增运算,你把arr[]的数组名arr传给fun,在fun里面arr将执行自增运算,是错误的。你可以这样:
int fun(float *p,int n,float *ptr_aver)
{
    int i,j,count=0;
    float sum=0,k=0;
    for(i=0;i<n;i++)
    {
        sum+=*p;
        p++;
    }
    k=sum/n;
    *ptr_aver=k;//我觉得这里没有必要
    for(j=0;j<n;j++)
    {
        if((*p)<(*ptr_aver))*ptr_aver直接用k就行了
        {
            count++;
            p--;
        }
    }
    return count;
}

void main()
{
    float arr[]={89,87,88,90,85,72,84,79};
    *pa=arr;
    int len=sizeof(arr)/sizeof(float);
    float i=10;
    float *p=&i;
    printf("%d\n",fun(pa,len,*p);
}

你试一下行不
2013-03-02 09:30
快速回复:函数传址时出现的问题,求指教
数据加载中...
 
   



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

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