Лекция 3. Одномерные массивы, указатели и ссылки Красс Александр Alexander.Krass@gmail.com СПбГУ ИТМО, 2008.

Презентация:



Advertisements
Похожие презентации
УКАЗАТЕЛИ. Переменная - это именованная область памяти с заданным типом. [=значение]; int a; //Переменная типа integer с именем a int b=2;// Переменная.
Advertisements

Двумерные динамические массивы. Двумерный массив - это одномерный массив, элементами которого являются одномерные массивы. Другими словами, это набор.
Лекция 10. Введение в ООП. Часть 3 Красс Александр СПбГУ ИТМО, 2008.
Основы информатики Массивы. Указатели. Заикин Олег Сергеевич
Функции Функция – именованная последовательность описаний и операторов, выполняющая некоторое действие. Может иметь параметры и возвращать значение. Функция.
Практическое занятие 6. Функции. Большинство языков программирования используют понятия функции и процедуры. C++ формально не поддерживает понятие процедуры,
Лекция 2. Фундаментальные типы данных и основные конструкции Красс Александр СПбГУ ИТМО, 2008.
Под объявлением одномерного динамического массива понимают объявление указателя на переменную заданного типа для того, чтобы данную переменную можно.
Массивы Теоретические сведения. Примеры решения задач. Задания для самостоятельного выполнения.
Основы информатики Лекция. Массивы. Указатели. Заикин Олег Сергеевич
МАССИВЫ 4 Определение 4 Описание 4 Обращение к элементам массива 4 Связь массивов с указателями 4 Примеры программ.
Лекция 5 Адресные типы. Указатели адрес (размещение в памяти) объекта Массивы последовательность однотипных данных Ссылки альтернативное имя объекта.
Лекция 8 Область видимости Время жизни. Область видимости Область видимости – характеристика именованного объекта Область видимости - часть текста программы,
Массивы Вариант 1 Program upr1; Var s,a:real; I: integer; Begin S:=0; For I:=1 to 10 do Begin Writeln (введите очередное число'); Readln(a); S: =s+a; End;
Лекция 6 Функции. Объявления и определения Объявление функции – указание имени функции, а также входных и выходных параметров Определение функции – указание.
Одномерные массивы. Задачи Знать: понятия: одномерный массив, элемент массива, индекс элемента, размер; этапы работы с массивами; алгоритмы решения основных.
К. Поляков, Программирование на языке Паскаль Часть II Тема: Массивы.
Лекция 6 Функции. Объявления и определения Объявление функции – указание имени функции, а также входных и выходных параметров Определение функции – указание.
Лекция 14 Динамические данные. Виды памяти Существует три вида памяти: статическая, стековая и динамическая. Статическая память выделяется еще до начала.
Лекция 8. Введение в ООП. Часть 1 Красс Александр СПбГУ ИТМО, 2008.
Транксрипт:

Лекция 3. Одномерные массивы, указатели и ссылки Красс Александр СПбГУ ИТМО, 2008

2 Объявление одномерного массива тип имя[константа];

3 Объявление одномерного массива int array[10]; int array[10], i, k = 0; int array[3] = {1, 2, 3}; int array[3] = {1, 2, 3}, array2[2], i;

4 Пример использования int a[3] = {1, 2, 3}; int sum = 0; for (int i = 0; i < 3; ++i) { sum += a[i]; } cout << "sum = " << sum << endl;

5 Пример использования int a[3] = {1, 2, 3}; cout << "a[0] = " << a[4] << endl; cout << "a[4] = " << a[4] << endl; cout << "a[-1] = " << a[4] << endl;

6 Пример использования int a[3] = {1, 2, 3}; cout << "a[0] = " << a[4] << endl; cout << "a[4] = " << a[4] << endl; cout << "a[-1] = " << a[4] << endl;

7 Пример использования int a[3] = {1, 2, 3}; cout << "a[0] = " << a[0] << endl; cout << "a[4] = " << a[4] << endl; cout << "a[-1] = " << a[-1] << endl; Вывод: a[0] = 1; a[4] = a[-1] =

8 Пример использования int a[3] = {1, 2, 3}; int sum = 0; for (int i = 0; i < 3; ++i) { sum += a[i]; } cout << "sum = " << sum << endl;

9 Пример использования const int LENGTH = 3; // > 0 int a[LENGTH] = {1, 2, 3}; int sum = 0; for (int i = 0; i < LENGTH; ++i) { sum += a[i]; }

10 Пример использования int n; cin >> n; int a[n];

11 Пример использования int n; cin >> n; int a[n]; // error C2057: expected // constant expression

12 Это нужно помнить Нумерация элементов ведётся с нуля! Размерность массива может задаваться только константным выражением! Оно должно вычисляться в положительное целое число.

13 Указатели int *i; // Указатель на // переменную типа // int int j, *i, *k, m = 0; int **i; // Указатель на // указатель на int

14 Инициализация указателей int i = 5; int *p1 = &i; // & - оператор взятия // адреса int *p2(&i); int *p3 = p2; int a[10]; int *p4 = a; int *p5 = (int *) 0x0012ff58;

15 Инициализация указателей double *d = new double; double *r = new double(10); double *t = new double[10];

16 Инициализация указателей Можно, но не стоит: int *p = (int *) malloc(10 * sizeof(int)); int *p = (int *) cmalloc(10 * sizeof(int)); // Заполняет нулями // выделенную память

17 Операция раз адресации int i = 5; int *p = &i; cout << p << endl; // Адрес // переменной i в памяти cout << *p << endl; // 5

18 Пример использования int *a = new int[3]; a[0] = 1; a[1] = 2; a[2] = 3; int sum = 0; for (int i = 0; i < 3; ++i) { sum += a[i]; } cout << "sum = " << sum << endl;

19 Пример использования int n; cin >> n; int *a = new int[n]; for (int i = 0; i < n; i++) cin >> a[i]; int sum = 0; for (int i = 0; i < n; ++i) { sum += a[i]; } cout << "sum = " << sum << endl;

20 Пример использования int *a = new int[3]; a[0] = 1; a[1] = 2; a[2] = 3; int sum = 0; for (int i = 0; i < 3; ++i) { sum += a[i]; } cout << "sum = " << sum << endl; delete[] a;

21 Что нужно помнить Выделили память через new, освободите с помощью delete. Выделили память через new[] освободите с помощью delete[]. Выделили память через malloc (cmalloc), освободите с помощью free.

22 Указатели и массивы Выражения имеют одинаковые значения: p = a и p = &a[0], если a определено как int a[положительная константа]; p[0] и a[0] p[15] и a[15], если p = a; p[15] и *(p + 14); (p + 1)[3] и p[4].

23 Ссылки int i = 5; int &j = i; // Другое имя для i j = 6; // i == 6 const int& k = 5; const int& m = i; // Другое имя // для i, но через него i нельзя // изменить m = 6; // Ошибка!

24 Что нужно знать Переменная-ссылка должна быть явно инициализироваться при её описании. (Кроме случаев, когда она является параметром функции, описана как extern или ссылается на поле данных класса.) После инициализации ссылке не может быть присвоена другая переменная. Тип ссылки должен совпадать с типом величины, на которую она ссылается. Не разрешается определять указатели на ссылки, создавать массивы ссылок и ссылки на ссылки.

25 Домашнее задание 1 Пользователь вводит положительное число n, затем n целых чисел. Из чисел, введённых пользователем нужно выбрать положительные и вывести на экран в порядке возрастания. Пример. n = 3 {7, -5, 5} => {5, 7}

26 Домашнее задание 2 (для продвинутых) Вы завуч в сильно платной школе. Перед Вами стоит задача распределения учеников в два класса для самых одарённых и для людей с нормальными способностями. Первые станут сумасшедшими учёными, а вторые финансовыми директорами успешных фирм. Ваша задача сделать так, чтобы студенты обоих классов наилучшим образом соответствовали направленностям классов.

27 Домашнее задание 2 (для продвинутых) У Вас есть список IQ всех учеников. Посоветовавшись с Вашей кошкой, Вы решили, что нужно разбить учеников на две группы так, чтобы разность IQ самого умного и самого глупого учеников в группе с самым широким диапазоном значений IQ была минимальна.

28 Домашнее задание 2 (для продвинутых) Пример. {200, 201, 101, 105, 88, 111} => {200, 201}, {101, 105, 88, 111}

29 Спасибо за внимание Вопросы?