Когда следует использовать амперсанд с scanf ()

Каковы правила использования амперсанда в c при использовании scanf() ?

 struct Student { char name[20]; int id; }; void main() { struct Student std1; printf("enter name and id of std1\n"); scanf("%s %d", std1.name, &(std1.id)); } 

Почему для String мне не нужно использовать амперсанд, а для int я должен его использовать?

Есть ли правило, когда использовать знак амперсанда?

scanf читает данные определенного типа в адресах, которые передаются как аргументы второго, третьего, четвертого и так далее …

 int var; 

здесь var – значение, а & var – адрес

 scanf("%d",&var); 

вышеприведенный оператор говорит, что ==> read% d (целочисленный) тип данных в & var address


 char s[20]; 

здесь s – это адрес не значение. потому что здесь s – массив чартов (мы называемся строкой)

Имя массива указывает его адрес. s == & s [0] , оба они одинаковы.

 scanf("%s",s); 

в приведенном выше утверждении указано, что ==> read% s (массив символов) тип данных в адресное место, начиная с s.


 int a[20]; 

см. этот код

 #include #define MAX 5 main() { int a[MAX]; int i; printf("Enter Values of array\n"); for(i=0;i 

В C У нас не было ни одного спецификатора формата для одновременной проверки группы целых чисел, как и группа сканирования символов в момент времени с помощью% s.

И здесь a = & a [0];

вы можете сканировать одно целое значение непосредственно на адрес, на который указывает a.

 scanf("%d",a); printf("a[0]=%d\n",a[0]); 

если вы введете 10, то печатает это значение [0] = 10.

Использование указателей:

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

вы можете переместить местоположение указателя для чтения массивов. вы можете читать массивы с перемещением указателя.

1.Испытания массивов путем перемещения указателей

  #include #define MAX 5 main() { int a[MAX]; int i; int *ptr; ptr = &a[0]; printf("Enter Values of array\n"); for(i=0;i 

2.Испытания массивов с перемещением указателей

 #include #define MAX 5 main() { int a[MAX]; int i; int *ptr; ptr = &a[0]; printf("Enter Values of array\n"); for(i=0;i 

при увеличении указателя приращение зависит от типа указателя. Здесь ptr - целочисленный указатель, поэтому ptr + 1 будет увеличивать ptr + sizeof (int).


 int a[5][5]; 

это двухмерный массив, поэтому для сканирования требуется 5 указателей, поэтому я был объявлен массив указателей.

 #include #define MAX 5 main() { int a[MAX][MAX],i,j; int *pointer[MAX]; for(i=0;i 

Прямое сканирование

  printf("Enter elements :\n"); for(i=0;i< MAX;i++) { for(j=0;j 

вы найдете большую часть вышеуказанного материала в приведенной ниже книге.

перейдите по этой ссылке: прочитайте wiki и прочитайте
Язык программирования C (второе издание) - Брайан У. Керниган и Деннис М. Ричи

Поскольку строки C имеют тип char [] . Имя массива имеет значение его адреса, но переменной int нет, вам нужно использовать &

И неправильно писать void main , вы всегда должны использовать int main .

В C строки представляют собой массивы символов (заканчивающиеся символом \0 ).

Имя массива возвращает указатель на первый элемент массива (ячейка памяти, где хранится массив), а имя скалярной переменной возвращает значение скаляра, поэтому вам нужно использовать оператор & для получения места памяти скаляра, в котором вам нужно написать значение.

  • Самый элегантный способ повторения слов строки
  • Как динамически распределять пространство памяти для строки и получать эту строку от пользователя?
  • Цитирование обратных косых черт в строковых литералах Python
  • Удалить все пустые строки
  • Как выполнить команду для каждой строки файла?
  • Почему нет replaceAll работать в этой строке кода?
  • Каков наилучший способ создания строки разделенных элементов в Java?
  • Как заменить специальные символы в строке?
  • Найти N-е вхождение символа в строке
  • Каков наилучший способ извлечения первого слова из строки в Java?
  • Возникновение подстроки в строке
  • Давайте будем гением компьютера.