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

结构 指针 指向性问题

#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各自在自己的名字空间(不同的函数),不会有冲突。

    打赏 评论

相关推荐 更多相似问题