2014-09-19 75 views
-2

我正在将C++代码转换为C进行练习(我们现在只是在学习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 struct`?
  2. 为了在C中分配内存,我不认为我的方法有效。我应该做一个for循环哪里它是malloc s A []的每个索引? (A应该是数组Pointstruct s)。

任何援助将不胜感激。

编辑:得到了代码的上下文。

这里是整个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.目前停留在我问的问题:重:那是什么线做的。我自那时以后就知道我需要创建一个名为sum的Point的结构,并在所有成员上运行add函数后打印它。

+5

您的C++代码不完整,没有多大意义。你能发布一些(最小的)真实代码吗? – juanchopanza 2014-09-19 15:54:15

回答

2

在你的C版本:

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

应该是:

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

因为在你的情况,你定义了一个名为Point全局变量。

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

const int N = 200; 

以及C++代码:

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

在C版本,应该是:

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

但是在这个版本中,内存没有用ze初始化RO。然后

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

回到你的问题:

可以使用calloc功能,而不是malloc与零分配内存和初始化

  1. 在C和++代码C++ sum函数,还是它是一个Point结构?

它是一个Point类型变量。

  1. 对于在C中分配内存,我不认为我的方法有效。我应该做一个for循环,它malloc每个索引的A []? (A应该是一个Point结构数组)。

不,没有必要编写for循环。 malloc函数将完成你想要的。

+1

除了C++代码中'Point'成员被重新初始化,并且在C版本中它们不是。 – juanchopanza 2014-09-19 16:01:41

+1

在C中,没有必要,也没有推荐使用'malloc/calloc/realloc'的结果! – alk 2014-09-19 16:05:48

+0

@juanchopanza谢谢你,我会改进这个 – MicroAleX 2014-09-19 16:05:53

2
  1. 在C++代码的C++和功能之和,或者是一个Point结构?

在你的情况,这是一个Point结构。

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

等同于:

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

如果您需要Point*sum,你应该把它写在下面的方法:

 Point *A = new Point[N], *sum; 
  • 对于在C中分配内存,我不认为我的方法适用
  • 它不工作,语法是错误的。尝试:

    编辑:感谢@mch,你不应该使用演员为malloc

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

    不要在c中施放malloc的返回值:http://stackoverflow.com/q/605845/3684343 – mch 2014-09-19 15:59:33

    +0

    @mch谢谢,很高兴认识到这一点。我想我很久没写C了。 – taocp 2014-09-19 16:00:22

    +0

    并且没有typedef,你需要写'struct Point'而不是'Point' – mch 2014-09-19 16:02:04