Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   www.boolean.name > Программирование игр для компьютеров > C++

Ответ
 
Опции темы
Старый 24.07.2014, 21:06   #1
maltsevvv
AnyKey`щик
 
Регистрация: 03.07.2014
Сообщений: 4
Написано одно полезное сообщение
(для 2 участников)
Как это работает?

Раньше программировал на VB. Сейчас изучаю С++.
Встретил в интернете эти функции подсчёта симолов в строке.
С первой всё понятно. Перебираем символы пока не встретим '\0'.
int strlen(char s[]){
int length = 0;
for (; s[length] != '\0'; length++);
return (length);
}

Но почему работают две эти?
int strlen(char *s){
int length;
for (length = 0; *s; length++, s++);
return length;
}

int strlen(char *s){
char *p = s;
while (*p) p++;
return (p - s);
}

Сломал голову. Поясните как это работает?

С уважением Виктор
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо maltsevvv за это полезное сообщение:
SBJoker (24.07.2014), St_AnGer (25.07.2014)
Старый 24.07.2014, 21:12   #2
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,900
Написано 2,149 полезных сообщений
(для 5,780 пользователей)
Ответ: Как это работает?

int strlen(char *s){
int length;
for (length = 0; *s; length++, s++);
return length;
}
s это указатель на участок памяти, в котором символ строки (первая буква изначально).
цикл инкрементирует указатель, т.е. с каждой итерацией, s ссылается на след. символ.
*s даёт значение символа по указателю.
когда *s выдаёт нуль-байт, цикл прерывается.

такой же принцип в последнем примере, только там вместо инкрементирования длины в цикле, юзается разница между указателем на конец строки и на начало.
__________________
бложик
geom.io
твиттер
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
St_AnGer (25.07.2014)
Старый 24.07.2014, 21:28   #3
maltsevvv
AnyKey`щик
 
Регистрация: 03.07.2014
Сообщений: 4
Написано одно полезное сообщение
(для 2 участников)
Ответ: Как это работает?

Доходчиво.
Всё понял.
Спасибо.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +1, время: 21:04.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com