С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

Чем по умолчанию инициализируется символьный массив? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Создать символьную матрицу http://www.cyberforum.ru/cpp-beginners/thread147168.html
Пытаюсь создать символьную матрицу для колоды карт: class Card { char card; public: Card() { card={"6-CH"}; //задание карт cars={"6-KR"}; card={"6-TR"};
C++ Перевод чисел из десятичной системы счисления в двоичную, восьмеричную, шестнадцатеричную напишите код программы для проверки перевода чисел из десятичной системы счисления в двоичную,восьмеричную,шестнадцатеричную на языке С главный принцип в создании программы тоесть когда... http://www.cyberforum.ru/cpp-beginners/thread147165.html
Перевод из десятичной системы счисления в двоичную, восьмеричную, 16-ричную C++
создание программы для проверки перевода чисел из десятичной системы счисления в двоичную,восьмеричную,шестнадцатеричную на языке С ПРИМЕЧАНИЕ тоесть когда пользователь программы на листочке...
C++ Сортировка участка матрицы
Помогите пожалуйста, надо на С++ написать такую прогу: пользователь вводит размерность квадратной матрицы, она рандомно заполняется элементами от 0 до 99, выводится на экран. Затем ее участок (на...
C++ Прямоугольная матрица http://www.cyberforum.ru/cpp-beginners/thread147130.html
Доброго дня всем!! вот задачку дали не могу решить: дана целочисленная матрица размером н на м найти первый столбец который имеет хотябф 1 нулевой эл., и найти сумму негативных парных элементов ...
C++ строка символов определить функцию для расчета количества букв 'н' в предложении подробнее

Показать сообщение отдельно
Evg
Эксперт CАвтор FAQ
18377 / 6424 / 441
Регистрация: 30.03.2009
Сообщений: 17,826
Записей в блоге: 28
19.06.2010, 11:55
Aye Aye, мусора на конце строки не будет

Если объяснять на пальцах, то в Си описание переменных можно сделать двумя способами:
  • "описание переменной;" (например "int x;" или "char a[10];") - переменная заводится но НЕ инициализируется. В этом случае глобальная переменная обнуляется, а локальная забивается мусором
  • "описание переменной = инициализатор;" (например "int x = 4;" или "char a[10] = { 'a', 'b' };"). В этом случае переменная инициализируется. Если переменная представляет собой массив или структуру, а инициализатор содержит меньше констант, чем требует того переменная, то вся оставшаяся часть переменной обнуляется

Таким образом при описании "char a[10] = { 'a', 'b' };" первые два элемента массива инициализируются значениями 'a' и 'b', а оставшиеся 8 элементов прописываются нулями. Языки Си/Си++ позволяют использовать строки (или более правильно название "строковые литералы") в качестве инициализаторов. В этом случае, например, строка "ab" трактуется как инициализатор из трёх элементов и эквивалентен { 'a', 'b', '\0' }.

Мы видим, что при инициализации массива char'ов строкой, инициализатор содержит на один элемент больше, чем если бы мы инициализировали через фигурные скобки. В следующих двух записях

C
1
2
char s[10] = { 'a', 'b' };
char s[10] = "ab";
по факту инициализация в обоих случаях будет одинакова, несмотря на то, что инициализаторы трактуются немного по разному. Но это происходит из-за того, что размер массива больше размера инициализатора и оставшиеся элементы прописываются нулями. Но вот две следующие инициализации НЕ эквивалентны

C
1
2
char s[] = { 'a', 'b' };
char s[] = "ab";
В первом случае массив s будет содержать два элемента, а во втором - три.

Краткий итог

1. При инициализации аггрегатной (составной) переменной неинициализированных хвост прописывается нулями
2. При инициализации массива char'ов строковой литерал трактуется как инициализатор из char'ов с нулём на конце. Т.е. две следующие записи строго эквивалентны

C
1
2
char s[10] = "ab";
char s[10] = { 'a', 'b', '\0' };
при этом с учётом пункта 1 обе записи трактуются как

C
1
char s[10] = { 'a', 'b', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0' };
10
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.