2014-02-02 4 views
-2

У меня есть код:Добавление указателей и Изменить значение

int double(int *x) { 
    *x = (*x) + (*x); 
    return *x; 
} 

int main() { 
    int i = 10; 
    int j; 
    j = double(&i); 
    printf("i= %d, j = %d\n", i, j); 
    return 0; 

}

Выход я = 20, J = 20. Почему значение я изменить?

+1

Потому что вы написали '* x = (* x) + (* x);'. – dmckee

+2

Ваш компилятор позволяет вам использовать 'double' как имя функции, действительно? – user3125367

+0

это первый обратный вопрос, который я когда-либо слышал. Люди часто спрашивают, почему значение не меняется –

ответ

2

Потому что вы передаете указатель на i на двойную функцию, которая позволяет ему изменять ее значение. Это называется «проход по ссылке». Если вы только что использовали ints вместо указателей, значение i не изменилось бы. Это называется «передать по значению».

0

Выход i изменяется, потому что вы написали *x = (*x) + (*x); в функции double, которую вы называете с j = double(&i); Поэтому будет x = x + x с x = 10, который 20.

Если вы отправляете указатель, вы разрешаете изменять содержимое этого int.

0
j = double(&i); 

Вы передаете адрес i, поэтому двойная функция может изменить его значение.

Если бы вы прошли как,

j = double(i); 

Значение i останется неизменным.

Смежные вопросы