Доступ через указатели может быть применён к элементам строки так же, как и к элементам массива. Приведем пример определения строки с использованием операций массива и с использованием указателей.
char str[] = "Privet"; //через массив
|
char* str= "Privet"; //через указатель
|
Во многих случаях эти два способа определения строк эквивалентны. Только в первом способе str – это адрес, а во втором способе str – это указатель-переменная, которая может изменять своё значение. Таким образом, строка, определённая как указатель, гораздо более гибка, чем строка, определённая как массив. Приведём следующий пример, демонстрирующий эту гибкость и показывающий, как строки используются в качестве аргументов.
void dispstr(char* ); // прототип функции
int main() {
char str[ ] = "Privet mir.";
dispstr(str);
getch(); return 0;
}
//---------------------------------------------------------------------------
void dispstr(char* ps) {
while(*ps) // пока не встретим конец строки ('\0')
cout << *ps++; // будем посимвольно выводить ее на экран
cout << endl;
}
На этом примере хорошо прослеживается схожесть использования указателей при передаче массивов и строк в функцию.
Ещё одно выгодное использование указателей можно продемонстрировать на примере массива строк.
I вар.
const int DAYS = 7;
const int MAX = 12; // макс. длина строки
int main() {
char arr[DAYS][MAX] = { "Ponedelnik", "Vtornik", "Sreda", "Chetverg", "Pjatnica", "Subbota", "Voskresenje" };
for(int j = 0; j < DAYS; j++)
cout << arr[j] << endl;
getch(); return 0;
}
| II вар.
const int DAYS = 7;
// указывать макс. длину строки не надо
int main() {
char* arr[DAYS] = { "Ponedelnik", "Vtornik", "Sreda", "Chetverg", "Pjatnica", "Subbota", "Voskresenje" };
for(int j = 0; j < DAYS; j++) // покажем все строки
cout << arr[j] << endl;
getch(); return 0;
}
|