Копирование одного массива в другой с помощью цикла while - PullRequest
0 голосов
/ 02 мая 2018

Я наткнулся на следующий фрагмент кода, который, как предполагается, принимает два разных символьных массива, копирует один в другой и затем распечатывает их;

#include <stdio.h>
void main()
{
  char a[15] = "hello";
  char b[15] = "goodbye";
  char * aa = a, *bb = b;
  while ( (*bb++ = *aa++) );
  printf("%s,%s\n",a,b);
}

Я не уверен, как здесь работает оператор while. Похоже, что он копирует адрес b в адрес a, но я действительно не знаю основную работу того, что здесь происходит. Любая помощь, понимающая это, будет оценена.

1 Ответ

0 голосов
/ 02 мая 2018

Что нужно знать:

  • *aa разыменовывает указатель aa, поэтому обращается к элементу aa, который указывает прямо сейчас

  • aa++ увеличивает aa на единицу. так как aa является указателем, теперь он указывает на следующий элемент . Это происходит после оценки.

  • a строка в C всегда заканчивается 0 байтом.

  • в логическом контексте, 0 равно false и любое другое значение true

  • и назначение соответствует присвоенному значению.

Таким образом, когда вы проходите через строки, в конечном итоге *aa будет 0 (конец строки), что дает всему выражению (*bb++ = *aa++) значение 0 - внутри while условие, это ложно, вызывая выход из цикла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...