| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1908 人关注过本帖
标题:返回一个指针的问题
只看楼主 加入收藏
li384022
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:102
专家分:176
注 册:2017-12-29
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:16 
返回一个指针的问题
图片附件: 游客没有浏览图片的权限,请 登录注册

#include <stdio.h>
#include <math.h>

#define DEG_TO_RED ((4 * atan(1)) / 180)

typedef struct polar_v {
    double magnitude;
    double angle;
} Polar_V;

typedef struct rect_v {
    double x;
    double y;
} Rect_V;

Rect_V polar_to_rect(Polar_V pv);

int main(void)
{
    Polar_V input;
    Rect_V result;

    puts("Enter magnitude and angle; enter q to quit:");
    while (scanf("%lf%lf", &input.magnitude, &input.angle) == 2)
    {
        result = polar_to_rect(input);
        printf("x = %.2f, y = %.2f\n", result.x, result.y);
        puts("Next input (q to quit):");
    }
    puts("Bye.");

    return 0;
}

Rect_V polar_to_rect(Polar_V pv)
{
    Rect_V rv;
    rv.x = pv.magnitude * cos(pv.angle * DEG_TO_RED);
    rv.y = pv.magnitude * sin(pv.angle * DEG_TO_RED);

    return rv;
}


请问怎么改写成返回指向该结构的指针
搜索更多相关主题的帖子: 返回 指针 double input result 
2018-01-03 16:02
grmmylbs
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:54
帖 子:1409
专家分:5845
注 册:2016-2-14
收藏
得分:10 
Rect_V *rv = malloc(sizeof(Rect_V));
 rv->x = pv.magnitude * cos(pv.angle * DEG_TO_RED);
 rv->y = pv.magnitude * sin(pv.angle * DEG_TO_RED);
2018-01-03 16:10
li384022
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:102
专家分:176
注 册:2017-12-29
收藏
得分:0 
回复 2楼 grmmylbs
也就是说必须给返回的结构体指针开辟一个地址空间  是不是最后得释放掉?
2018-01-03 16:13
grmmylbs
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:54
帖 子:1409
专家分:5845
注 册:2016-2-14
收藏
得分:0 
是的
2018-01-03 16:17
li384022
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:102
专家分:176
注 册:2017-12-29
收藏
得分:0 
我在主函数加入 free(rv); 编译说没定义,我又去主函数定义Rect_V *rv;这个指针应该不是在局部函数开辟的空间地址指针,所以说free的也不是malloc开辟的地址,请问怎么才能free刚刚malloc的空间呢?谢谢
2018-01-03 16:31
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10609
专家分:43210
注 册:2014-5-20
收藏
得分:10 
用结构地址做输入输出参数不可以吗?
2018-01-03 16:37
li384022
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:102
专家分:176
注 册:2017-12-29
收藏
得分:0 
回复 6楼 吹水佬
你写一下你的想发这一部分代码  我看看   也就几行
2018-01-03 16:43
grmmylbs
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:54
帖 子:1409
专家分:5845
注 册:2016-2-14
收藏
得分:0 
Rect_V *result = polar_to_rect(input);
free(result );
......

Rect_V *polar_to_rect(Polar_V pv)
{
......
}

2018-01-03 16:44
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10609
专家分:43210
注 册:2014-5-20
收藏
得分:0 
以下是引用li384022在2018-1-3 16:43:17的发言:

你写一下你的想发这一部分代码  我看看   也就几行

#include <stdio.h>
#include <math.h>

#define DEG_TO_RED ((4 * atan(1)) / 180)

typedef struct polar_v {
    double magnitude;
    double angle;
} Polar_V;

typedef struct rect_v {
    double x;
    double y;
} Rect_V;

Rect_V *polar_to_rect(Polar_V *pv, Rect_V *rv);

int main(void)
{
    Polar_V input;
    Rect_V result;

    puts("Enter magnitude and angle; enter q to quit:");
    while (scanf("%lf%lf", &input.magnitude, &input.angle) == 2)
    {
        polar_to_rect(&input, &result);
        printf("x = %.2lf, y = %.2lf\n", result.x, result.y);
        puts("Next input (q to quit):");
    }
    puts("Bye.");
    return 0;
}

Rect_V *polar_to_rect(Polar_V *pv, Rect_V *rv)
{
    rv->x = pv->magnitude * cos(pv->angle * DEG_TO_RED);
    rv->y = pv->magnitude * sin(pv->angle * DEG_TO_RED);
    return rv;
}


[此贴子已经被作者于2018-1-3 16:54编辑过]

2018-01-03 16:51
li384022
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:102
专家分:176
注 册:2017-12-29
收藏
得分:0 
回复 8楼 grmmylbs
哦哦  学习了 领教了  可是我把malloc函数删了也编译成功运行成功  证明它不是必须的啊   。。。。  
2018-01-03 16:53
快速回复:返回一个指针的问题
数据加载中...
 
   



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

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