将C++代码转换为C,结构数组

Converting C++ code to C, array of structs

本文关键字:结构 数组 C++ 代码 转换      更新时间:2023-10-16

我正在将C++代码转换为C进行练习(我们现在只是在学习C++),我对这一部分感到困惑。

首先,c++代码:

Point()
{
    x = y = 0;
}
main()
{
    const int N = 200;
    Point *A = new Point[N], sum;    
}

这是我的C版本:

struct Point //constructor
{
    int x;
    int y;
} Point;
main()
{
    int N = 200;
    Point* A = malloc(N * sizeof(*Point[]));
}

这应该会让你知道我想做什么。问题:

  1. C++代码中的sum是C++sum function, or is it a结构体吗
  2. 对于在C中分配内存,我认为我的方法不起作用。我应该做一个for循环,其中它Point是a[]的每个索引吗?(A应该是structPoint个的数组)

如有任何协助,我们将不胜感激。

编辑:被问及代码的上下文。

以下是整个C++程序:

#include <iostream>
// a point on the integer grid
struct Point
{
  // constructor
  Point()
  {
    x = y = 0;
  }
  // add point componentwise
  void add(const Point &p)
  {
    x += p.x;
    y += p.y;
  }
  // print to standard output
  void print() const
  {
    std::cout << "[" << x << "," << y << "]" << std::endl;
  }
  // data
  int x, y;
};

int main()
{
  const int N = 200;
  Point *A = new Point[N], sum;
  for (int i=0; i < N; ++i) {
    sum.print();
    A[i].x = i; A[i].y = -i;
    sum.add(A[i]);
  }
  sum.print();
  delete [] A;
}

最终,我必须在C中模仿这一点。目前我一直在问一个问题:re:那行做什么。从那以后,我发现我需要制作一个名为sum的Point结构,并在对其所有成员运行add函数后打印它。

在您的C版本中:

struct Point //constructor
{
int x;
int y;
} Point;

应该是:

typedef struct //constructor
{
int x;
int y;
} Point;

因为在您的案例中,您定义了一个名为const的全局变量。

而且,C编程语言也有calloc关键字作为C++,所以你可以在C语言中这样做:

const int N = 200;

和C++代码:

Point *A = new Point[N], sum;

在C版本中,应为:

Point *A = malloc(N * sizeof(Point)), sum;

但在这个版本中,内存并不是由零初始化的。

您可以使用malloc函数而不是Point来分配内存并用零初始化:

Point *A = calloc(N, sizeof(Point)), sum;

然后回到你的问题:

  1. c++代码中的sum是c++sum函数,还是Point结构

它是一个for类型的变量。

  1. 对于在C中分配内存,我认为我的方法不起作用。我应该做一个for循环,在那里它对a[]的每个索引进行mallocs?(A应该是点结构的数组)

不,不需要编写malloc循环。Point*函数将执行您想要的操作。

  1. c++代码中的sum是c++sum函数,还是Point结构

在您的情况下,它是一个Point结构。

   Point *A = new Point[N], sum;

相当于:

   Point *A = new Point[N];
   Point sum; //I have no idea why naming is sum

如果malloc需要sum,则应按照以下方式编写:

     Point *A = new Point[N], *sum;
  1. 对于在C中分配内存,我认为我的方法不起作用

它不起作用,语法错误。尝试:

编辑:感谢@mch,CCD_16不应该使用强制转换。

typedef struct Point Point;
Point* A = malloc(N * sizeof(Point));