marshimaro2016 2017-01-30 16:56 采纳率: 50%
浏览 1040
已采纳

结构 指针 指向性问题

#include
#include
// 声明2个结构:polar 和 rect
struct polar
{
double distance;
double angle;
};
struct rect
{
double x;
double y;
};
// 声明 2个指针变量:polar类型rect_to_polar,数组:rect类型的xypos
polar rect_to_polar(rect xypos); // polar类型 rect_to_polar和rect类型 xypos
void show_polar(polar dapos); // polar类型 dapos
int main()
{
using namespace std;
rect rplace; // 创建rect类型的变量rplace
polar pplace;

cout << "Enter the x and y value: ";
while (cin>>rplace.x>>rplace.y)    // rplace.x我不太明白如何存储的,rplace的变量名+句点成员x,是不是存储在了结构里了?创建一个变量本身是不产生空间的,创建一个结构才会有空间?
{
    pplace = rect_to_polar(rplace);// 将对象rect_to_polar(指针)赋给pplace变量?
    show_polar(pplace);// 将变量pplace赋给变量show_polar?
    cout << "Next two numbers (q to quit): ";
}
cout << "Done.\n ";
return 0;

}
// 定义polar rect_to_polar(rect xypos)
polar rect_to_polar(rect xypos)
{
using namespace std;
polar answer; // 创建polar类型 的 answer
answer.distance =
sqrt(xypos.x*xypos.x + xypos.y*xypos.y);//xypos.x相当于变量xypos与结构变量x的值,然后赋给了局部变量answer的结构变量distance?
answer.angle = atan2(xypos.y, xypos.x);
return answer;
}
// 定义void show_polar(polar dapos)
void show_polar(polar dapos)
{
using namespace std;
const double Rad_to_deg = 57.29577951;
cout << "distance = " << dapos.distance;
cout << ", angle = " << dapos.angle*Rad_to_deg;
cout << "degrees \n ";
}
########################

如果改用指针来指向结构变量又有问题了
#include
#include
struct polar
{
double distance;
double angle;
};
struct rect
{
double x;
double y;
};
void rect_to_polar(const rect*pxy, polar*pda); // 这里为什么设置2个指针*pxy*pda
void show_polar(const polar*pda);// 这里又设置了一模一样的*pda,会不会有问题?
int main()
{
using namespace std;
rect rplace;
polar pplace;
cout << "Enter the x and y values: ";
while (cin >> rplace.x >> rplace.y)
{
rect_to_polar(&rplace, &pplace); // 这里套了2层,将&pplace的地址传导rplace变量,再将&rplace地址传到了rect_to_polar?
show_polar(&pplace); //这里不明白怎么又是&pplace地址了呢
cout << "Next two numbers (q to quit) : ";
}
cout << "Done.\n";
system("pause");
return 0;
}
void show_polar(const polar*pda)
{
using namespace std;
const double Rad_to_deg = 57.29577951;
cout << "distance=" << pda->distance;
cout << ", angle =" << pda->angle*Rad_to_deg;
cout << "degrees\n ";
}
void rect_to_polar(const rect*pxy, polar*pda)
{
using namespace std;
pda->distance =
sqrt(pxy->x*pxy->x + pxy->y*pxy->y);
pda->angle = atan2(pxy->y, pxy->x);
}
上面2题是教程里面的题目,麻烦大神们给我思路理一下,不胜感激啊!

  • 写回答

1条回答 默认 最新

  • 战在春秋 2017-01-30 22:00
    关注

    最核心的要求:**函数形参和调用函数的实参类型必须一致。**

    代码前半部分两个函数形参为结构体变量,所以调用函数时需传入结构体变量。
    代码后半部分两个函数形参为结构体变量指针,所以调用函数时需传入结构体变量的地址。

    void rect_to_polar(const rect*pxy, polar*pda); // 这里为什么设置2个指针*pxy*pda
    void show_polar(const polar*pda);// 这里又设置了一模一样的*pda,会不会有问题?

    这个不会有问题,两个pda各自在自己的名字空间(不同的函数),不会有冲突。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 我下载图形界面重启完就变成这样了,打字也打不了,动也动不了,该怎么解决(操作系统-centos)
  • ¥15 VBA中在窗体中遍历所有checkbox控件,提取出被选中的checkbox的caption值
  • ¥15 在Ubuntu上有什么命令,或者是系统文件能告诉我链接nvme ssd的pcie槽位是不是支持热插拔功能?
  • ¥15 ansys license许可证问题
  • ¥20 QQ号和密码都能正常登录微信 QQ号和密码登录微信显示密码错误
  • ¥15 qiankun主应用注册子应用提示跨域
  • ¥15 单片机RTOS Kernel与应用分离开发,Kernel如何调起应用?
  • ¥15 快手小店商家版APP怎么第三方APP跳转到指定用户聊天界面
  • ¥15 为什么AVL fire软件仿真时的步长改变了,仿真结果也会改变
  • ¥100 如何帮我写一个java小游戏