首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将结构属性作为参数传递

如何将结构属性作为参数传递
EN

Stack Overflow用户
提问于 2015-01-28 15:26:57
回答 3查看 1.1K关注 0票数 1

我试图把结构件传递给函数,这有可能吗?我希望创建像下面的setLeftMotorSpeed这样的通用函数,并将它们传递给我想要的任何东西,在这种情况下,我需要通过指针设置robot.leftMotorSpeed

示例:

代码语言:javascript
复制
typedef struct
{
    int maximumSpeed;
    int leftMotorSpeed;
    int rightMotorSpeed;
    int timesAboveMaximumSpeed;
    int batteryLevel;
    int collisions;

}robot;

void setLeftMotorSpeed(int *speed, int *leftMotorSpeed, int *rightMotorSpeed)
{
    *leftMotorSpeed = *speed;
}

void chooseRequest(int *command, int *speed, robot RP6)
{
    switch(*command)
    {
        case 1:
            setMaximumSpeed(speed, &RP6.maximumSpeed);
            break;
        case 2:
            getMaximumSpeed(speed, &RP6.maximumSpeed);
            break;
        case 3:
            setLeftMotorSpeed(speed, &RP6.leftMotorSpeed, &RP6.rightMotorSpeed);
            moveAtSpeed(RP6.leftMotorSpeed, RP6.rightMotorSpeed);       
            break;
        case 4:
            setRightMotorSpeed(speed, &RP6.leftMotorSpeed, &RP6.rightMotorSpeed);
            moveAtSpeed(RP6.leftMotorSpeed, RP6.rightMotorSpeed);
            break;
        case 5:
            break;
        case 6:
            break;
        case 7:
            break;
        default:
            break;
    }
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-01-28 15:59:27

如果简单地传递指向结构的指针并让函数修改它需要的字段,代码就会更简单。如果函数需要从多个机器人中提取信息,则只传递单个字段(或指向它们的指针)。您的setLeftMotorSpeed函数看起来可能如下所示:

代码语言:javascript
复制
void setLeftMotorSpeed(robot *rptr, int speed)
{
    rptr->leftMotorSpeed = speed;
}

当然,这是一个微不足道的例子。如果moveAtSpeed函数的目的是只移动一个特定的机器人,那么该函数也可以使用机器人指针。

顺便说一下,这是面向对象思维的开始。你已经建立了一个用来描述机器人的结构。下一步是把其中一个机器人结构上的函数看作是对整个机器人的逻辑操作,这样就可以编写要求机器人“加速”的代码,而不必担心如何做到这一点。

PS:不建议为command使用指针。简单的只读值应该作为普通参数传递。每次使用“取消引用”指针都需要额外的时间和代码,并且不需要额外的源代码复杂性。这是一个很小的差别,但是在整个程序中做这样的事情的累积效果可能是显著的。

票数 1
EN

Stack Overflow用户

发布于 2015-01-28 15:29:12

只是

代码语言:javascript
复制
robot my_robot;

setLeftMotorSpeed(&speed, &my_robot.leftMotorSpeed, &rightMotorSpeed);

这将起作用,并根据您的需要设置my_robot.leftMotorSpeed的值。

票数 3
EN

Stack Overflow用户

发布于 2015-01-28 15:33:41

chooseRequest()函数必须接受指向robot的指针,以便能够修改它。

如前所述,您只是在修改一个本地副本,该副本在函数退出时不再存在。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28196039

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档