Как получить доступ к массиву символов по-разному
У меня есть функция, использующая арифметику указателей, чтобы распечатать все символы внутри символа *:
void printCharArray(char* c,int n)
{
for (char*p=c+n-1; n; n--)
cout << *p--;
}
Приведенный выше код работает, но я хочу попробовать другой способ, который не работает:
void printCharArray(char* c,int n)
{
char *p = &c [n - 1];
for (int i = 0; i < n; i++)
cout << *--p;
}
Странное поведение в том, что если я изменю char *p = &c [n - 1];
в char *p = &c [n];
тогда это работает, но я ожидаю &c [n - 1]
равен последнему символу в массиве char, но не &c[n]
?
1 ответ
Решение
--p;
эквивалентно p = p - 1; p;
p--;
эквивалентно auto tmp = p; p = p - 1; tmp
другими словами
void printCharArray(char* c,int n)
{
for (char*p=c+n-1; n; n--)
cout << *p--;
}
это покажет *p
, *(p - 1)
,..., *(p - n)
void printCharArray(char* c,int n)
{
char *p = &c [n - 1];
for (int i = 0; i < n; i++)
cout << *--p;
}
это покажет *(p - 1)
, *(p - 2)
,..., *(p - (n+1))