forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   C++ (http://forum.boolean.name/forumdisplay.php?f=22)
-   -   Как это работает? (http://forum.boolean.name/showthread.php?t=19325)

maltsevvv 25.07.2014 01:06

Как это работает?
 
Раньше программировал на 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);
}

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

С уважением Виктор

Mr_F_ 25.07.2014 01:12

Ответ: Как это работает?
 
Цитата:

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

такой же принцип в последнем примере, только там вместо инкрементирования длины в цикле, юзается разница между указателем на конец строки и на начало.

maltsevvv 25.07.2014 01:28

Ответ: Как это работает?
 
Доходчиво.
Всё понял.
Спасибо.


Часовой пояс GMT +4, время: 08:00.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot