我想知道这个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很陌生,我只是想更好地了解它是如何运作的。
答案 0 :(得分:2)
这只是Java中的marriage.male = father;
。
(*marriage).male
相当于C中的marriage->male
。marriage
是指向内存位置的指针,类似于对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