Разница между использованием указателя для присваивания значения / обычным присваиванием? - PullRequest
0 голосов
/ 21 мая 2019

В чем разница между этими двумя:

x = x + 5

* y = * y + 5 (где * y указывает на адрес x)

Насколько я знаю, оба дают одно и то же значение, и оба меняют содержимое в этом адресе памяти - так есть ли какая-то реальная разница?Зачем вам когда-либо использовать указатель в такой ситуации, когда требуется дополнительная выборка?

Ответы [ 2 ]

2 голосов
/ 21 мая 2019

Зачем вам когда-либо использовать указатель в такой ситуации, когда требуется дополнительная выборка?

Ты бы не стал.

Вот небольшой пример того, как вы можете сделать некоторые полезные с указателями. Допустим, вы хотите написать функцию, в которой вы увеличиваете аргумент на единицу. Это не может быть сделано без указателей. Это может выглядеть так:

void inc(int *x) {
    *x = *x + 1;
}

Теперь мы можем использовать эту функцию следующим образом:

int main() {
    int a = 5;
    printf("Value before: %d\n", a);        
    inc(&a); // The & is to send the address of the variable
    printf("Value after: %d\n", a);
}

Эта программа напечатает это:

Value before: 5
Value after: 6
0 голосов
/ 21 мая 2019

Обычно используются указатели, когда несколько частей кода должны совместно использовать одно и то же значение, а изменения, сделанные в одной части, отражаются в другой части. Это отличается от того, что значение просто копируется в разные части, что приводит к потере «связи» с исходным значением.

Например, для работы с общим значением вы можете передать указатель на целое значение функции. Эта функция может затем напрямую изменить «первоначально» переданное значение, разыменовав указатель. Напротив, при передаче целочисленного значения «по значению» в функцию, функция будет работать с копией и не будет иметь никаких шансов изменить «исходное» значение напрямую.

Если первый или последний правильный выбор, зависит от того, хотите ли вы использовать общее состояние или вы определенно хотите отделить части кода.

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