标题:返回一个指针的问题
只看楼主
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: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册: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: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册: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



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-483931-1-1.html




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

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