русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Инициализация массивов в С++11


Дата добавления: 2013-12-24; просмотров: 2418; Нарушение авторских прав


Правила инициализации массивов.

В С++ существует несколько правил, касающихся инициализации массивов. Они ограничивают, когда можно ее осуществлять и определяют, что случится, если количество элементов массива не соответствует количеству элементов инициализатора.

Использовать инициализацию можно ТОЛЬКО при объявлении массива.

Ее нельзя выполнить позже и нельзя присваивать один массив другому:

int card[4] = {3, 6, 8, 10}; // разрешено

int hand[4]; //разрешено

hand[4] = {5, 8, 3, 9}; //не допускается

hand = card; //не допускается

Но, можно использовать индексы и присваивать значения элементам массива индивидуально. При инициализации массива можно указывать меньше значений, чем в массиве объявлено элементов.

Например, float hotelTips[5] = {5.0, 2.5};

Если инициализировать массив частично, то компилятор присваивает остальным элементам нулевые значения. Это значит, что инициализировать весь массив нулями очень легко – для этого достаточно явно инициализировать нулем его первый элемент:

long totals[500] = {0};

Если инициализировать массив таким же образом, но с применением 1, вместо 0, только первый элемент будет установлен в 1, а остальные по-прежнему получат значение 0.

Если при инициализации массива оставить квадратные скобки пустыми, то компилятор самостоятельно пересчитает элементы. Предположим, например, что есть следующее объявление:

short totals[] ={1, 8, 4, 2};

Компилятор сделает totals массивом из пяти элементов.

 

В С++11 форма инициализации с фигурными скобками (списковая инициализация) стала универсальной для всех типов. Массивы уже используют списковую инициализацию, но в версии с++11 появились дополнительные возможности.

1. При инициализации массива можно отбросить знак =.

double earn[4] {1.3e5, 1.6e3, 1.1e4, 1.7e4};

2. Можно использовать пустые фигурные скобки для установки всех элементов в 0.



unsigned int counts[10] = {}; // все элементы устанавливаются в 0

float balances[100] {}; // все элементы устанавливаются в 0

3. Списковая инициализация защищает от сужения.

long plifs[] = {25, 92, 3.0}; // не разрешено

char slifs[4] = {‘h’, ‘u’, 1122011, ‘\0’}; // не разрешено

char plifs[] = {‘h’, ‘u’, 112, ‘\0’}; // разрешено

1)Преобразование из типа с плавающей точкой в целочисленный тип является сужением, даже если значение с плавающей точкой содержит после десятичной точки только нули.

2)1122011 выходит за пределы диапазона значений типа char, предполагая, что char занимает 8 бит.

3)Выполняется успешно, несмотря на то, что 112 значение int, но оно находится в рамках диапазона типа char.

Программа 1.Массивы целых чисел.

// arrayone.cpp -- small arrays of integers

#include <iostream>

int main()

{

using namespace std;

int apple[3]; // creates array with three elements

apple[0] = 7; // assign value to first element

apple[1] = 8;

apple[2] = 6;

 

int applecosts[3] = {20, 30, 5}; // create, initialize array

 

cout << "Total apple = ";

cout << apple[0] + apple[1] + apple[2] << endl;

cout << "The package with " << apple[1] << " apple costs ";

cout << applecosts[1] << " cents per apple.\n";

int total = apple[0] * applecosts[0] + apple[1] * applecosts[1];

total = total + apple[2] * applecosts[2];

cout << "The total apple expense is " << total << " cents.\n";

 

getchar();

return 0;

}



<== предыдущая лекция | следующая лекция ==>
Массивы. | Конкатенация строковых литералов.


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.186 сек.