Какова роль -s в этом коде, где s — указатель символа?

#c #c #string #character #pointer-arithmetic

#c #c #строка #символ #указатель-арифметика

Вопрос:

В этом коде

 strcpy(s, "bacalaureat");
i = strchr(s, 'a') - s; // i = 1
 

Значение i равно 1 . Почему это так, и какова роль -s вышеупомянутого?

Комментарии:

1. strchr возвращает указатель на найденную позицию, поэтому вычитание указателя в начале строки из этого дает вам индекс найденной позиции. И действительно, первый a in bacalaureat находится в позиции 1. ( b Находится в позиции 0).

2. это в основном std::find(s.begin(), s.end(), 'a');

3. Пользователь использует тег «указатель-арифметика» на SO.

Ответ №1:

Из ссылки:

char *strchr( const char *str, int ch );

Находит первое вхождение ch … в байтовой строке с нулевым завершением, на которую указывает str

So strchr(s, 'a') вернет указатель на первое вхождение символа a , который является вторым символом в s .

Вычитание s из этого результата — это просто арифметика указателя, которая дает вам индекс символа a в s , который равен 1.