Member 13382291 Ответов: 1

Int I=5, *p; p= & amp;I; scanf ("%d", p); printf ("%d %d\n", I, *p);


здесь p-это указатель, указывающий на i. но как он может принять значение через scanf, если он принят, он должен содержать значение заданных данных. но он содержит адрес i. при печати *p и i. мы получаем время выполнения ввода в качестве вывода.
Int I=5, *p;
p=&I; scanf("%d", p);
printf("%d %d\n", I, *p);


Что я уже пробовал:

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

jeron1

Итак, ваш вопрос: почему вы печатаете одни и те же два числа?

1 Ответов

Рейтинг:
2

OriginalGriff

p является указателем на I и scanf нужен указатель n, чтобы знать, куда поместить значение, которое он читает.
Это нормально, потому что в C все передается через функцию по значению нет по ссылке - это означает, что функция получает копию переменной, а не саму переменную. Это имеет большой смысл, если вы подумаете об этом:

void foo(int x)
   {
   x = x +1;
   printf("%d\n");
   }
Это прекрасно, но что произойдет, если вы назовете это так:
foo(666);
Если бы вы не взяли копию значения, у вас был бы код, пытающийся изменить значение постоянного числа!

Поэтому, если вы хотите изменить что-то в вызывающей функции из вызываемой функции, вы должны передать указатель, а не значение, поэтому передается копия указателя, которая указывает на то же место, что и оригинал.