Указатели, как работает этот код? - PullRequest
0 голосов
/ 10 мая 2018

int j = 10;

void f() { 
    int *i; 
    i = &j;
    *i = 7;
    i = (int *) malloc(sizeof(int)); 
    *i = j; 
    j = j + 5; 
    printf("%d %d", *i, j);
}

Запишите два значения, которые будет выводить функция f

Я не могу полностью понять, как работают указатели

Так что это моя интерпретация кода

 int j = 10;

J присваивается значению 10 в памяти и имеет адрес, скажем, 200

  int *i;

объявление указателя

   i = &j;

Значение i теперь 200

  *i = 7

значение * i равно 7

  i = (int *) malloc(sizeof(int))

не совсем понимаете, что делает приведенный выше код, но я думаю, что он присваивает переменной i размер целого числа в массиве?

  *i = j

Указывает ли * адрес j или значение j

   j = j + 5

значение j (что я не знаю, что такое) + 5

Спасибо

1 Ответ

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

Прежде всего, я бы порекомендовал либо почитать хорошую книгу по Си, либо поискать учебник в Интернете, чтобы получить некоторые базовые знания.

int *i;
i = &j;

Это делает указатель переменной i, указывающей на ту же область памяти, где находится переменная j (так что ваше предположение верно).

*i = 7;

Теперь местоположение, на которое указывает i, обновляется до значения 7. Таким образом, j больше не равен 10, теперь оно равно 7, поскольку *i и j - это одно и то же значение.

i = (int *) malloc(sizeof(int));

Теперь вы выделили новый кусок памяти кучи, достаточный для хранения одного значения int. i больше не указывает на местоположение j.

*i = j;

Установите значение, хранящееся в местоположении, указанном i, таким же, как j, в данном случае 7.

j = j + 5;

Увеличение j на 5. Поскольку i больше не указывает на &j, значение, сохраненное в *i, не изменяется.

printf("%d %d", *i, j);

Значение печати *i и j. Как было показано ранее, i указывает на область памяти со значением 7, а j равно 7 + 5 = 12.

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