如何在struct中实现指针?

时间:2014-07-16 17:47:32

标签: c++ pointers data-structures

我是C ++(和编程)的新手,我正在尝试使用以下访问函数实现“Point”结构:

void setData(struct Point*, int u, int v);
void getRadius(struct Point*);

该计划应该:

  1. 在X = 3,Y = 4
  2. 处创建点P1
  3. 输出P1的半径
  4. 使用这些指南:

    struct Point A;   // instantiates a point at A based on the struct Point
    A_ptr = &A;
    setData(A_ptr, 3, 4);   // initializes the point A(3,4)
    int Radius = getRadius(A_ptr);   // calculates R and returns the value to Radius
    

    这是我的代码(显然是错误的):

    #include "stdafx.h"
    #include <iostream>
    #include <cmath>;
    
    using namespace std;
    
    // the equation of a circle is:
    // (x-a)^2 + (y-b)^2 = r^2, where (a,b) are the coordinates of the center
    
    struct Point
    {
        int X;    // x position
        int Y;    // y position
        float R;  // radius of circle
    
        void setData(struct Point*, int u, int v);
        float getRadius(struct Point*);
        void inputCoordinates(int X, int Y);
    
    };
    
    
    
    int main()
    {
        struct Point A;   // instantiates a point at A based on the struct Point
        A_ptr = &A;
        setData(A_ptr, 3, 4);   // initializes the point A(3,4)
        int Radius = getRadius(A_ptr);   // calculates R and returns the value to Radius
    
        cout << "The radius of a circle with points x = " << X << " and Y = " << Y << " is: " << Radius;
    
    
    }
    
    
        return 0;
    }
    
    void Point::setData(struct Point*, int u, int v)
    {
        X = u;
        Y = v;
    }
    
    float Point::getRadius(struct Point*)
    {
        return sqrt(pow(X,2) + pow(Y,2));
    }
    

    问题本身很简单。我似乎无法将问题(以及问题参数)“映射”到指针和结构的概念(我已经阅读过,但对我来说似乎仍然模糊)。

    非常感谢任何建议和指导。

    提前谢谢你看看。 --Ryan

4 个答案:

答案 0 :(得分:0)

你的Point :: setData需要阅读:

void Point::setData(struct Point*, int u, int v)
{
    point->X = u;
    point->Y = v;
}

作为 - &gt;是指针的成员访问器(相当于。对于非指针变量)

或者如果您在C中编码,请将其设为函数,而不是方法:

void setData(struct Point*, int u, int v)
{
    point->X = u;
    point->Y = v;
}

答案 1 :(得分:0)

在您的最后两个功能setDatagetRadius中,您永远不会使用Point参数。

将其更改为:

void setData(Point* p, int u, int v)
{
    p->X = u;
    p->Y = v;
}  

float getRadius(Point* p)
{
    return sqrt(pow(p->X,2) + pow(p->Y,2));
}  

换句话说,不要将它们作为Point的成员函数。

答案 2 :(得分:0)

这就是我在C ++风格中的表现

#include <iostream>
#include <cmath>

using namespace std;

// the equation of a circle is:
// (x-a)^2 + (y-b)^2 = r^2, where (a,b) are the coordinates of the center

struct Point
{
    int X;    // x position
    int Y;    // y position 

    void setData(int u, int v);
    float getRadius();
    void inputCoordinates(int X, int Y);
};



int main()
{
    Point A;   // instantiates a point at A based on the struct Point

    A.setData(3, 4);   // initializes the point A(3,4)
    float Radius = A.getRadius();   // calculates R and returns the value to Radius

    cout << "The radius of a circle with points x = " << A.X << " and Y = " << A.Y << " is: " << Radius;
    return 0;


}

void Point::setData(int u, int v)
{
    X = u;
    Y = v;
}

float Point::getRadius()
{
    float value;
    value = (float)sqrt(pow(X, 2) + pow(Y, 2));
    return value;
}

答案 3 :(得分:0)

我强烈建议您使用float或double作为X和Y坐标的数据类型。

您的半径不应该是您的结构的成员。它在概念上不是一个点的一部分,而是描述两点之间的距离。

将参数赋予getRadius()一个名称,例如&#34; p&#34;。 然后你的getRadius()方法的主体可能只是

{
  float dx = X - p->x;
  float dy = Y - p->y;
  return sqrt(dx * dx + dy * dy); // Pythagorean formula
}

我希望这会让你朝着正确的方向前进。