Java中的C指针等价

时间:2018-05-28 17:30:16

标签: java c pointers malloc

我想知道这个C代码块的Java转换是什么。

 Person * father = malloc(sizeof(Person));
 Marriage * marriage = malloc(sizeof(Marriage));
 (* marriage).male = father;

我猜我用的是引用。因此,不要让变量父指向Person,而只是为类Person创建一个父对象:

Person father = new Person();

我可能错了。

(* marriage).male = father;如何运作?

我对C很陌生,我只是想更好地了解它是如何运作的。

3 个答案:

答案 0 :(得分:2)

这只是Java中的marriage.male = father;

(*marriage).male相当于C中的marriage->malemarriage是指向内存位置的指针,类似于对Java中使用new创建的对象的引用。 / p>

另外,请注意,虽然在某种意义上它们可以与Java结构相关联,但它们肯定不是“等价物”。 Java有一个垃圾收集器。 C没有。 Java被解释。 C不是。有很多细微的差别,所以我永远不会说C中的任何东西都与任何Java相当。

不是通过将其与Java等同来学习C,而是明确地阅读有关C的书。有些文章如“C for Java programmers”可能是一个更好的入口。但是,根本不要将Java与C等同起来,这只会导致糟糕的事情。

答案 1 :(得分:2)

我们无法使用Java中的指针,但是,我们可以将C中的代码转换为Java:

    Person father = new Person();
    Marriage marriage = new Marriage();
    marriage.male = father;

(*婚姻).male =父亲;就像婚姻一样 - >男性=父亲喜欢cadaniluk说。此运算符(*指针)获取指针的值,在这种情况下,它是一个结婚对象。如果您想更好地理解C中的指针,请阅读本文:Pointers in C

答案 2 :(得分:0)

C是一种结构化但不是面向对象的语言。基本上有两种机制来实现对象之类的东西:数据结构在一侧称为 Structs ,在另一侧称为指针。指针类似于变量,但是用于引用给定字段的内存地址。

struct Person {
    char name[50];
};

struct Marriage {
    struct Person *father; /* fields of type 'pointer to a struct person' */
    struct Person *mother; 
} marriage;

int main() {
    struct Person father = {"Steve"};
    marriage.father = &father; /* marriage.father references the memory address of father */
    ...
}

相反,Java是一种面向对象的语言,例如,一个对象 A 引用另一个对象 B ,而不需要那个特殊指针类型,因为这些&#34 ;指向"发生隐含。 所以Java中的代码示例是:

Person father = new Person(); // acts like struct Person
Marriage marriage = new Marriage(); // acts like struct Marriage
marriage.male = father; // marriage.male references ("points to") father memory address