Инициализация массива C++
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.
Почему, если мы не инициализируем переменную, то при попытке работы с ней будет ошибка
Если тоже самое проделать с int, то в ячейке будет -858993460.
Второй день только изучаю C++, отсюда и такие тупые вопросы.
Потому что переменная — это имя области памяти, выделенной для этой переменной тем или иным способом. При выделении памяти, в общем случае, её содержимым является мусор: случайные значения. (То, что в твоём случае там оказываются вполне определённые значения — особенности работы твоего компилятора.) Понятно, что при работе с неинициализированной переменной (читай — со случайным значением) ничего хорошего получиться не может.
По поводу особенностей работы твоего компилятора: память для переменной (
char x[10]
илиint
) выделяется в области памяти, все байты которой имеют значение 0xCC (в двоичном виде 11001100). Поэтому значение "неинициализированной переменной типаchar
будет 0xCC (16-ричное значение), или 204 (беззнаковое десятичное значение), или -52 (знаковое десятичное значение), или символ «русское М большое». А значение переменной типаint
(размером 4 байта) будет 0xCCCCCCCC, или 3 435 973 836 (беззнаковое десятичное значение), или -858 993 460 (знаковое десятичное значение). Собственно, значение, которое ты и получил: типint
— это знаковый тип.Лично я, посоветовал бы вам Вадим, начать читать какую нибудь книгу по С++ (Прата, Дейтел, Страуструп (основатель языка С++, кстати) и т.д.) и прочитать как минимум глав 5, ну а потом задавать вопросы, не тупые, а по теме ;).
Что касается вашего вопроса.
Здесь вы объявили переменную типа
char
и под эту переменную ОС гарантировано выделяет 1 байт памяти, которая, в свою очередь, располагается по определенному адресу, в котором уже хранится какая-то информация (проще говоря «мусор»). Значение не инициализированной переменной не обязательно будет 52, как в вашем случае, оно будет отличаться от системы к системе. А компьютер, как вы знаете, вещь очень точная и работать со всяким там «мусором» не будет, поэтому и нужно инициализировать переменные, и ответственность за это лежит полностью на программисте.По поводу значения типа
int
все тоже самое. Почему разные значения? Потому что вся информация в компьютере хранится в виде чисел (даже буквы) и разные типы данных имеют различный размер. Конкретно типchar
имеет размер от -128 до 127 (-52 соответствует русской букве'M'
). Размеры различных целочисленных переменных можно посмотреть подключив заголовочный файлclimits
, а информацию о числах с плавающей точкой в заголовочном файлеfloat
.Alf, выделяется один байт.
Sorry, за «очепятку» , совершенно верно, под тип
char
выделяется один байт памяти :).Насколько я помню, Страуструп утверждает, что размер
char
не всегда равен одному байту.Все можно проверить, применимо к конкретной ОС, подключив заголовочный файл
climits
.