Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 9 лет назад пользователемМихаил Борков
1 Лекция 3. Одномерные массивы, указатели и ссылки Красс Александр СПбГУ ИТМО, 2008
2 2 Объявление одномерного массива тип имя[константа];
3 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 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 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 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 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 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 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 10 Пример использования int n; cin >> n; int a[n];
11 11 Пример использования int n; cin >> n; int a[n]; // error C2057: expected // constant expression
12 12 Это нужно помнить Нумерация элементов ведётся с нуля! Размерность массива может задаваться только константным выражением! Оно должно вычисляться в положительное целое число.
13 13 Указатели int *i; // Указатель на // переменную типа // int int j, *i, *k, m = 0; int **i; // Указатель на // указатель на int
14 14 Инициализация указателей int i = 5; int *p1 = &i; // & - оператор взятия // адреса int *p2(&i); int *p3 = p2; int a[10]; int *p4 = a; int *p5 = (int *) 0x0012ff58;
15 15 Инициализация указателей double *d = new double; double *r = new double(10); double *t = new double[10];
16 16 Инициализация указателей Можно, но не стоит: int *p = (int *) malloc(10 * sizeof(int)); int *p = (int *) cmalloc(10 * sizeof(int)); // Заполняет нулями // выделенную память
17 17 Операция раз адресации int i = 5; int *p = &i; cout << p << endl; // Адрес // переменной i в памяти cout << *p << endl; // 5
18 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 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 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 21 Что нужно помнить Выделили память через new, освободите с помощью delete. Выделили память через new[] освободите с помощью delete[]. Выделили память через malloc (cmalloc), освободите с помощью free.
22 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 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 24 Что нужно знать Переменная-ссылка должна быть явно инициализироваться при её описании. (Кроме случаев, когда она является параметром функции, описана как extern или ссылается на поле данных класса.) После инициализации ссылке не может быть присвоена другая переменная. Тип ссылки должен совпадать с типом величины, на которую она ссылается. Не разрешается определять указатели на ссылки, создавать массивы ссылок и ссылки на ссылки.
25 25 Домашнее задание 1 Пользователь вводит положительное число n, затем n целых чисел. Из чисел, введённых пользователем нужно выбрать положительные и вывести на экран в порядке возрастания. Пример. n = 3 {7, -5, 5} => {5, 7}
26 26 Домашнее задание 2 (для продвинутых) Вы завуч в сильно платной школе. Перед Вами стоит задача распределения учеников в два класса для самых одарённых и для людей с нормальными способностями. Первые станут сумасшедшими учёными, а вторые финансовыми директорами успешных фирм. Ваша задача сделать так, чтобы студенты обоих классов наилучшим образом соответствовали направленностям классов.
27 27 Домашнее задание 2 (для продвинутых) У Вас есть список IQ всех учеников. Посоветовавшись с Вашей кошкой, Вы решили, что нужно разбить учеников на две группы так, чтобы разность IQ самого умного и самого глупого учеников в группе с самым широким диапазоном значений IQ была минимальна.
28 28 Домашнее задание 2 (для продвинутых) Пример. {200, 201, 101, 105, 88, 111} => {200, 201}, {101, 105, 88, 111}
29 29 Спасибо за внимание Вопросы?
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.