2014-10-13 6 views
-1

мне нужно найти значения I и J после выполняется следующий код:C: Trouble понимание указателей в этой программе

int i = 2; 
int j = 2; 
int *p = &i; 
int *q = &j; 
i++; 
j--; 
*p = *q + 2; 
*q = *p + 3; 
p=q; 
*p = *q + 1; 

Позвольте мне описать то, что я думаю, что происходит в этом коде. В третьей и четвертой строке:

int *p = &i; 
int *q = &j; 

указатели р и д инициализируются адресами I и J, соответственно. в 5-м и 6-м направлениям:

i++; 
j--; 

я становится 3 и J становится 1. Это приводит к * р равным 3, и * д, чтобы быть 1.

В 7-й линии,

*p = *q + 2 

означает значение, которое указывает на р равно значению, что д указывает на plus` 2, поэтому я становится 3.

в следующей строке:

*q = *p + 3; 

J становится 6.

Я не уверен, что происходит в этой следующей строке:

p = q; 

Я думаю, что это означает: "адрес I равен адресу J". Я не знаю, какие конечные значения i и j будут в этой ситуации. Можете ли вы помочь мне понять, что происходит?

+2

'р = q; 'означает, что' p' теперь указывает на то, где 'q' указывает, что находится на' j'. Строка после этого означает, что 'j' заканчивается значением' 7', и как '* p', так и' * q' также оцениваются до 7. Однако вы получили все остальное. –

+1

одним из способов сделать это проще - запустить его в отладчике (на основе IDE это лучше всего, потому что вы можете видеть каждую переменную после каждого шага). – KevinDTimm

+0

Спасибо за подсказку @KevinDTimm – TheEyesHaveIt

ответ

7

Представьте, что ваша память выглядит следующим образом после начальной инициализации p и q:

 
+---+  +---+ 
| p | --> | i | 
+---+  +---+ 

+---+  +---+ 
| q | --> | j | 
+---+  +---+ 

После выполнения

p = q; 

выглядит это вместо того, чтобы:

 
+---+ 
| p | --\ 
+---+ \  +---+ 
      >--> | j | 
+---+ / +---+ 
| q | --/ 
+---+ 
+1

как вы это делаете так быстро ??? : D – Haris

3
p = q; 

Это просто означает, что теперь p указывает на то же самое, что q указывал на то, j.