| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 643 人关注过本帖
标题:不知道哪里错了,求指教
只看楼主 加入收藏
yeyeyeyue
Rank: 1
等 级:新手上路
帖 子:65
专家分:0
注 册:2014-11-26
结帖率:50%
收藏
已结贴  问题点数:10 回复次数:9 
不知道哪里错了,求指教
程序代码:
#include <stdio.h>
int main()
{
    float op1,op2,*psum,*pdiff;
    void sum_diff(float op1,float op2,float *psum,float *pdiff);
    printf("输入两个数:");
    scanf("%d%d",&op1,&op2);
    sum_diff(op1,op2,*psum,*pdiff);       // cannot convert parameter 3 from 'float' to 'float *'

    printf("%f+%f=%f",op1,op2,*psum);
    printf("%f-%f=%f",op1,op2,*pdiff);
    return 0;
}
void sum_diff(float op1,float op2,float *psum,float *pdiff)
{
    *psum=op1+op2;
    *pdiff=op1-op2;
}
2015-06-02 23:06
诸葛欧阳
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:流年
等 级:贵宾
威 望:82
帖 子:2790
专家分:14619
注 册:2014-10-16
收藏
得分:1 
scanf("%d%d",&op1,&op2);确定是%d?

一片落叶掉进了回忆的流年。
2015-06-02 23:21
Frangmuler
Rank: 2
等 级:论坛游民
帖 子:12
专家分:21
注 册:2013-4-5
收藏
得分:7 
第一:"sum_diff(op1,op2,*psum,*pdiff);" 这里边的3、4参数不要带"*"号。声明时:"float *psum,*pdiff;"不会错,但当作为变量使用时,是不需要的,此        
     时就是存储地址的变量(即指针变量)。
    修改为:sum_diff(op1,op2,psum,pdiff);

第二:还有2楼说的问题也要注意,你声明的变量是float型,那么scanf的也要%f才对。


第三:还有在main函数中,未初始化指针,这是很危险的(有时不同的编译器的要求会有所不同,指针最好先初始化再使用)。
    多声明两个float变量:flot  add1,sub2;
    将两个指针指向它们:psum = &add1;
                        pdiff = &sub2;
    这样才能告诉系统你这两个指针是指向哪里的,同时也能让sum_diff()函数将两个计算结果存储到安全地址段中。
    希望这些对你有所帮助。

[ 本帖最后由 Frangmuler 于 2015-6-2 23:36 编辑 ]
2015-06-02 23:21
诸葛欧阳
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:流年
等 级:贵宾
威 望:82
帖 子:2790
专家分:14619
注 册:2014-10-16
收藏
得分:1 
sum_diff(op1,op2,psum,pdiff);       // 传指针

一片落叶掉进了回忆的流年。
2015-06-02 23:30
yeyeyeyue
Rank: 1
等 级:新手上路
帖 子:65
专家分:0
注 册:2014-11-26
收藏
得分:0 
以下是引用诸葛欧阳在2015-6-2 23:21:22的发言:

scanf("%d%d",&op1,&op2);确定是%d?



恩恩,我知道啦,谢谢!
2015-06-02 23:36
取名字
Rank: 8Rank: 8
等 级:贵宾
威 望:21
帖 子:236
专家分:924
注 册:2015-4-27
收藏
得分:1 
指针psum,pdiff未初始化。会导致非法访问。
2015-06-02 23:37
yeyeyeyue
Rank: 1
等 级:新手上路
帖 子:65
专家分:0
注 册:2014-11-26
收藏
得分:0 
以下是引用Frangmuler在2015-6-2 23:21:45的发言:

第一:"sum_diff(op1,op2,*psum,*pdiff);" 这里边的3、4参数不要带"*"号。声明时:"float *psum,*pdiff;"不会错,但当作为变量使用时,是不需要的,此        
     时就是存储地址的变量(即指针变量)。
    修改为:sum_diff(op1,op2,psum,pdiff);

第二:还有2楼说的问题也要注意,你声明的变量是float型,那么scanf的也要%f才对。


第三:还有在main函数中,未初始化指针,这是很危险的(有时不同的编译器的要求会有所不同,指针最好先初始化再使用)。
    多声明两个float变量:flot  add1,sub2;
    将两个指针指向它们:psum = &add1;
                        pdiff = &sub2;
    这样才能告诉系统你这两个指针是指向哪里的,同时也能让sum_diff()函数将两个计算结果存储到安全地址段中。
    希望这些对你有所帮助。

                                               太感谢你了,受益匪浅!
2015-06-02 23:38
诸葛欧阳
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:流年
等 级:贵宾
威 望:82
帖 子:2790
专家分:14619
注 册:2014-10-16
收藏
得分:0 
#include <stdio.h>
int main()
{
    float op1,op2,*psum,*pdiff;
    void sum_diff(float op1,float op2,float *psum,float *pdiff);
    printf("输入两个数:");
    scanf("%f%f",&op1,&op2);
    //sum_diff(op1,op2,psum,pdiff);
    float a=op1+op2,b=op1-op2;
    psum=&a;
    pdiff=&b;
    printf("%f+%f=%f",op1,op2,*psum);
    printf("%f-%f=%f",op1,op2,*pdiff);
    return 0;
}
/*void sum_diff(float op1,float op2,float* psum,float* pdiff)
{
    *psum=op1+op2;
    *pdiff=op1-op2;
}*/

一片落叶掉进了回忆的流年。
2015-06-02 23:42
快速回复:不知道哪里错了,求指教
数据加载中...
 
   



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

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