Символьный массив
Язык C++ содержит ключевое слово
auto char ch;
Обычной практикой является объявление всех переменных, используемых в функции, в начале программного блока этой функции. В этом случае всякий, кому придется разбираться в коде этой функции, легко узнает, какие переменные в ней используются. Тем не менее начало блока функции — это не единственно возможное место для объявления локальных переменных. Локальные переменные можно объявлять в любом месте блока кода. Переменная, объявленная в блоке, локальна по отношению к этому блоку. Это означает, что такая переменная не существует до тех пор, пока не будет выполнен вход в блок, а разрушение такой переменной происходит при выходе из ее блока. При этом никакой код вне этого блока не может получить доступ к этой переменной (даже код, принадлежащий той же функции).
Чтобы лучше понять вышесказанное, рассмотрим следующую программу.
/* Эта программа демонстрирует локальность переменных по отношению к блоку.
*/
#include
#include
using namespace std;
int main()
{
int choice;
cout << "(1) сложить числа или ";
cout << "(2) конкатенировать строки?: ";
cin >> choice;
if(choice == 1) {
int a, b; /* Активизируются две int-переменные. */
cout << "Введите два числа: ";
cin >> а >> b;
cout << "Сумма равна " << a+b << '\n';
}
else {
char s1 [80], s2[80]; /* Активизируются две строки. */
cout << "Введите две строки: ";
cin >> s1;
cin >> s2;
strcat(s1, s2);
cout << "Конкатенация равна " << s1 << '\n';
}
return 0;
}
Эта программа в зависимости от выбора пользователя обеспечивает ввод либо двух чисел, либо двух строк. Обратите внимание на объявление переменных
/* Эта программа некорректна. */
#include
#include
using namespace std;
int main()
{
int choice;
cout << "(1) сложить числа или ";
cout << "(2) конкатенировать строки?: ";
cin >> choice;
if(choice == 1) {
int a, b; /* Активизируются две int-переменные. */
cout << "Введите два числа: ";
cin >> а >> b;
cout << "Сумма равна " << a+b << '\n';
}
else {
char s1 [80], s2 [80]; /* Активизируются две строки. */
cout << "Введите две строки: ";
cin >> s1;
cin >> s2;
strcat (s1, s2);
cout << "Конкатенация равна " << s1 << '\n';
}
a = 10; // *** Ошибка ***
// Переменная а здесь неизвестна!
return 0;
}