Я хотел знать, каким будет Java-перевод этого блока кода C.
Person * father = malloc(sizeof(Person));
Marriage * marriage = malloc(sizeof(Marriage));
(* marriage).male = father;
Я предполагаю, что использую ссылку. Поэтому вместо того, чтобы указывать отцу переменной на Person, я просто создаю объект-отец для класса Person следующим образом:
Person father = new Person();
Я могу ошибаться в этом.
Как будет работать линия (* marriage).male = father;?
Я новичок в C, и я просто пытаюсь лучше понять, как это работает.




Это был бы просто marriage.male = father; на Java.
(*marriage).male эквивалентен marriage->male в C. marriage - это указатель на ячейку памяти, аналогичный ссылке на объект, созданный с помощью new в Java.
Также обратите внимание, что хотя в определенном смысле они могут быть связаны с конструкциями Java, они определенно не являются «эквивалентами». Например, в Java есть сборщик мусора. C не делает. Java интерпретируется. C нет. Есть много тонких различий, поэтому я бы никогда не сказал, что что-либо в C эквивалентно любой Java.
Вместо того, чтобы изучать C, приравнивая его к Java, прочтите книгу о C. Есть статьи, такие как «C для программистов Java», которые могут быть для вас лучшим входом. Однако вообще не стоит приравнивать Java к C, это приведет к плохим вещам.
Мы не можем работать с указателями на Java, но мы можем перевести этот код с C на Java:
Person father = new Person();
Marriage marriage = new Marriage();
marriage.male = father;
(* брак). мужчина = отец; это то же самое что брак-> мужчина = отец как сказал каданилук. Этот оператор (* указатель) получает значение указателя, в этом случае это объект брака. Если вы хотите лучше понять указатели в C, прочтите эту статью: Указатели в C
C - это структурированный, но не объектно-ориентированный язык. В основном есть два механизма для реализации чего-то вроде объектов: структуры данных, называемые Структуры с одной стороны и Указатель с другой стороны. Указатель похож на переменные, но предназначен для ссылки на адрес памяти данного поля.
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 - это язык объектно-ориентированный, где, например, объект АРекомендации другой объект B, без необходимости в этом специальный тип указателя, потому что эти "указания" происходят неявно. Итак, ваш пример кода на 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