Rajesh457 Ответов: 3

Почему мы не используем амперсанд(&) в printf и почему мы используем его в scanf ?


если вы не используете амперсанд(&) в scan f, то показываете, что программа перестала работать. почему мы используем его только в scanf на языке Си.. пожалуйста, объясните мне подробно и простым языком

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

когда я пытаюсь запустить программу без амперсанда(&), то показываю, что программа перестала работать

3 Ответов

Рейтинг:
20

KarstenK

&Amp; - это оператор, который преобразуется в "адрес переменной", поэтому функция сканирования получает адрес (или указатель) для записи результата.

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

Пожалуйста, прочтите некоторые фундаментальные учебники по программированию. ;-)


Рейтинг:
18

CPallini

В C язык программирования, аргументы функций являются устаревшими по значению Следовательно, любая модификация, которую вызываемая функция вносит в свои аргументы, скрыта для вызывающего, например, попробуйте

 #include <stdio.h>

void square_it( int n )
{
  n = n * n;
  printf("inside square_it, n = %d\n", n);
}

int main()
{
  int i = 5;
  printf("before function call, i = %d\n", i);
  square_it( i );
  printf("after function call, i = %d\n", i);
  return 0;
} 


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

 #include <stdio.h>

void square_it2( int * p )
{
  *p = *p * *p;
  printf("inside square_it2, *p = %d\n", *p);
}

int main()
{
  int i = 5;
  printf("before function call, i = %d\n", i);
  square_it2( &i ); // passing a poitner to i, that is i address
  printf("after function call, i = %d\n", i);
  return 0;
} 



Теперь, пока printf не нуждается в изменении своих аргументов (это выходная функция) scanf делает (это входная функция). Следовательно, он нуждается в указателях переменных (адресах) в качестве аргументов.


Рейтинг:
1

Patrice T

Начните с чтения документации на языке Си.
Использование & is подробно объяснено
& - это то, что вы делаете с переменной.
е получить значение из переменной
scanf записывает значение в переменную и для этого ему нужен адрес переменной.