将C++代码转换为C,结构数组
Converting C++ code to C, array of structs
我正在将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[]));
}
这应该会让你知道我想做什么。问题:
- C++代码中的
sum
是C++sum function, or is it a
点结构体吗
- 对于在C中分配内存,我认为我的方法不起作用。我应该做一个for循环,其中它
Point
是a[]的每个索引吗?(A应该是struct
个Point
个的数组)
如有任何协助,我们将不胜感激。
编辑:被问及代码的上下文。
以下是整个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;
然后回到你的问题:
- c++代码中的sum是c++sum函数,还是Point结构
它是一个for
类型的变量。
- 对于在C中分配内存,我认为我的方法不起作用。我应该做一个for循环,在那里它对a[]的每个索引进行mallocs?(A应该是点结构的数组)
不,不需要编写malloc
循环。Point*
函数将执行您想要的操作。
- 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;
- 对于在C中分配内存,我认为我的方法不起作用
它不起作用,语法错误。尝试:
编辑:感谢@mch,CCD_16不应该使用强制转换。
typedef struct Point Point;
Point* A = malloc(N * sizeof(Point));
相关文章:
- C++将文本文件中的数据读取到结构数组中
- JSON转换为nlohmann JSON-lib中的结构数组
- 需要帮助将结构数组传递给函数
- 在 64 位边界上对齐C++结构数组?
- 带有枚举方向/类型的气泡排序结构数组
- 在C++中访问结构数组中的数据
- 从指向结构数组的指针中提取元素
- 如何制作一个地图,其中的值是C++中的结构数组
- 如何在函数中显示结构数组
- 包含作为成员C++函数的结构数组
- 如何修复函数中的 fstream 文件输入以将正确的信息存储在结构数组中?
- std::transform 将一个结构数组复制到另一个结构数组
- 将非托管结构数组封送到托管数组
- 显示结构数组
- 结构数组中所有类似字段的总和
- 结构数组的构造函数错误,错误消息:没有构造函数实例与参数列表匹配
- 在 glsl opengl 中将嵌套结构数组作为统一传递
- 使用初始化列表填充C++中的多维结构数组时出现问题
- 如何将字符串字符与结构数组进行比较?
- C++结构数组