Эквивалентность указателя C в Java

Я хотел знать, каким будет 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, и я просто пытаюсь лучше понять, как это работает.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
110
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Это был бы просто 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

Другие вопросы по теме