Как работает указатель в C в этом алгоритме? - PullRequest
0 голосов
/ 19 января 2020

У меня есть программа для вычисления наибольшего значения согласных в строке следующим образом:

int solve(const char* strin) {
  char *vowels = "aeiou";
  int solution = 0;
  int current = 0;
  char *c;
  while(c = *strin++) {
    current = strchr(vowels, c) ? 0 : current + c - 96;
    if(current > solution) solution = current;
  }
  return solution;
}

Я запутался с командой char *vowels = "aeiou";, потому что, как я узнал в университете, Указатель относится только к первому элементу в массиве, если не существует увеличения или уменьшения. Действительно ли написать так? А почему?

1 Ответ

0 голосов
/ 19 января 2020

Когда вы пишете

char* vowels = "aeiou";

, указатель vowels указывает на первый элемент «массива», то есть «a», то, что вы делаете с этим указателем, зависит от вас, если вы, например, хотите доступ к третьему элементу, на который указывает гласная, тогда *(vowels + 2) даст вам - адрес того же vowels + 2

, вы также можете объявить vowels следующим образом

char vowels[] = "aeiou";  here vowels again tells where the array starts

прототип strchr выглядит следующим образом:

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

Когда вы передаете vowels, вы указываете функции начать поиск, где гласные начинаются с 'ch'. strchr просматривает, пока не найдет конец строки, который является \0, если он находит, он возвращает указатель на это место, то есть гласные + 0, +1, ...

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