Эквивалентность указателя C в Java - PullRequest
0 голосов
/ 28 мая 2018

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

Ответы [ 3 ]

0 голосов
/ 28 мая 2018

Мы не можем работать с указателями в Java, но мы можем перевести этот код в C на Java:

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

(* брак) .male = отец;это то же самое, что брак -> мужчина = отец, как сказал каданилук.Этот оператор (* указатель) получает значение указателя, в этом случае это объект брака.Если вы хотите лучше понять указатели в C, прочитайте эту статью: Указатели в C

0 голосов
/ 28 мая 2018

C - это структурированный, но не объектно-ориентированный язык.Существуют два основных механизма реализации объектов, подобных объектам: структуры данных, называемые Structs с одной стороны и Pointer с другой стороны.Указатель подобен переменным, но создан для ссылки на адрес памяти данного поля.

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 , без необходимости для специального типа указателя , потому что это "указание" происходит неявно.Итак, ваш пример кода на 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
0 голосов
/ 28 мая 2018

Это было бы просто marriage.male = father; в Java.

(*marriage).male эквивалентно marriage->male в C. marriage - указатель на область памяти, похожая на ссылку на объектсозданный с помощью new в Java.

Также обратите внимание, что, хотя в определенном смысле они могут быть связаны с конструкциями Java, они, безусловно, не являются «эквивалентами».У Java есть сборщик мусора, например.С неЯва интерпретируется.С неЕсть много тонких различий, поэтому я бы никогда не сказал, что что-то в C где-нибудь эквивалентно любой Java.


Вместо изучения C путем отождествления его с Java, прочитайте книгу о C.такие статьи, как «C для Java-программистов», могут быть для вас лучшим входом.Однако на самом деле не стоит отождествлять Java с C, это просто приводит к плохим вещам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...