Циклы в С вызове: это можно сделать по-другому? - PullRequest
1 голос
/ 02 декабря 2010

Привет всем экспертам C (пожалуйста, не стреляйте, я больше не программист C, но время от времени у меня возникает вопрос, который возникает у меня в голове)

Я читал другой вопрос ( Как напечатать введенную строку в обратном направлении C, используя только цикл for ).

Самый простой и логичный ответ:

for (x = end; x >= 0; --x) {
    printf("%c", word[x]);
}

Но мне было интересно, если бы не было способа достичь той же цели, но оставаться ближе к исходной поставленной петле:

for (x = word[end]; x >= word[0]; x--) {
    printf("%c", x);
}

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

char * wordp;
for(wordp = &word[end]; /*something*/; wordp--){\
   printf("%c", &wordp);
}

P.S .: Мне все равно, петля вперед или назад.

P.P.S .: Извините, если я сделал очевидные ошибки C в указателях; укажите их в комментарии, и я отредактирую их. ;)

Jason

Ответы [ 4 ]

4 голосов
/ 02 декабря 2010

Абсолютно.

char *wordp;

for(wordp = word + end; wordp >= word; wordp--){
   printf("%c", *wordp);
}
1 голос
/ 03 декабря 2010

Реальные программисты используют рекурсию:

void revputs(char *s) {
  if (*s) { revputs(s + 1); putchar(*s); }
}
1 голос
/ 02 декабря 2010

Вы можете сделать:

    char * wordp;
    for(wordp = &word[end]; wordp >= word ; wordp--){\
            printf("%c", *wordp);
    }
1 голос
/ 02 декабря 2010
for (x = word[end]; x >= word[0]; x--) {
    printf("%c", x);
}

не будет работать, так как слово [конец] эквивалентно * (слово + конец).Он уже разыменовывается, поэтому x будет установлен на значение последнего символа и будет повторяться до тех пор, пока не станет равным значению char первого символа.Короче говоря, это не имеет смысла.

Попробуйте:

char * wordp;
for(wordp = (word + end); wordp >= word; wordp--){\
   printf("%c", *wordp);
}

Помните, что массив - это просто указатель на его первый элемент.

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