@Evsign

Почему не срабатывает арифметика указателей?

Есть задание, где надо написать функцию, которая вернёт колличество символов в строке, т.е. получается надо считать пока не наткнёшься на \0

Я сделал вот таким способом:
unsigned strlen(const char *str) {
	for (int i = 0; true; ++i)
	{
		if (str[i] == '\0'){

			return i;
		}
	}
	
}

Но как сделать тоже самое, только работая с памятью?

В попытках разобраться застопорился в самом начале.
unsigned strlen(const char *str) {
	cout << str+4 << endl;
	
}

int main(){
	strlen("string");

}

Подскажите пожалуйста где ошибка в моих рассуждениях?
"string" - это массив чаров.
Т.к. "string" массив, то на первый элемент будет указывать переменная в которой он содержится.
В контексте функции strlen - это будет указатель str. Т.е. &str[0] тоже самое, что просто str. По правилам сложения указателй str+4 должно соответствовать адресу ячейки памяти индекса 4. Т.е. должен выводиться адрес 4й ячейки в 0х виде, но вместо этого выводится почему-то "ng".

Как можно получить адрес 4й ячейки к примеру?
  • Вопрос задан
  • 2421 просмотр
Решения вопроса 2
@Lol4t0
str + 4 - это не символ, а указатель на символ, т.еtypeof(str+4) == char*
cout воспринимает char* как строку, и выводит символы от начала строки и до '\0'. В вашем случае, выводится 'n', следующий символ 'g', потом встречается'\0', и вывод прекращается.

Если вы хотите вывести символ 'n', то вам нужно разыменовать указатель:cout << *(str+4)

При обращении по индексу вы получаете содержимое массива по этому индексу а не указатель на элемент: typeof(str[4])==char

str+4 === &str[4]
*(str+4) === str[4].
Ответ написан
Taraflex
@Taraflex
Ищу работу. Контакты в профиле.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы