Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Параметры массива

Параметры ссылки параметры указателя

 

Оба способа применяются для более эффективной работы с большими объектами при их передаче в функцию. При этом ссылка инициализируется только один раз и адресуемый ей объект всегда один. Указатель напротив может на время своей жизни может адресовать множество объектов или не одного. Ссылку мы инициализируем всегда. Поскольку указатель может не содержать адрес объекта, т.е. быть пустым то перед его использованием нужно сделать проверку на пустоту. Если параметр должен ссылаться на несколько объектов или принимать нулевое значение, то следует использовать указатели. Наиболее распространённые применение их это перегрузка (сложение, вычитание и др.) благодаря ссылкам эти операторы могут применяться к пользовательским типам с интуитивно понятным синтаксисом. Пусть имеется структура матрица.

Matrix operator+(Matrix m1, Matrix m2) {

Matrix res;

Необходимое действие.

Return res;

}

 

Matrix a, b, c;

C = a+b;

В этом решение передача параметра осуществляется по движению. Это значит, они будут копироваться в стек, что снижает эффективность работы в случае больших объектов. Допустим мы решили использовать передачу по ссылке с помощью указателя.

C= & (& a+ & b) +& c;

C = a+b+c; Matrix operator+(const Matrix & m1, const Matrix & m2)

Ссылки были введены в С++ для того чтобы решить две задачи

1) обеспечить эффективность реализации программы, предоставить интуитивно понятный синтаксис

Присваивать переменные разные значения по ссылке – указатель. Если не нужно, то ссылки.

 

Параметры массива

В С++ массив никогда не передаётся по значению, вместо этого всегда даётся адрес первого объекта, поэтому следующее описание функции будет одинаково. Размер массива при описании функции её параметра не важен. Передача массива имеет следующие особенности:

1) изменение значение аргумента параметра внутри функции, поэтому если такое поведение не желательно, то можно исп. ключевое слово const.

2) Размер массива не является частью типа параметра (встроенный тип массив, не содержит сведений о своём размере.

При проверке типов параметра компилятор способен распознать, что в обоих случаях строки 9, 12 тип аргумента int* и это соответствует объявлению функции, но контроль того является ли аргумент массивом не производится.

 

Передача двумерного массива.

 

1 Void printArray(const int **arr, int arr rc,

2 Int cc) {

3 For (int I = 0; I< rc; i++) {

4 For (int j=0; j < cc; j++) {

5 Printf (“%3d”, arr[i], [j]);

6 }

7 Printf(“\n”);

8 }

9 }

(1) В этом случае параметр м, объявляется как двумерный массив содержащий 10 столбцов и неизвестное число строк, как и для одномерного массива.

Многомерный массив, как и одномерный так же как и одномерный передается, и размерность первого измерения не очень важна, все остальные размерности должны быть указаны.

Второй способ это использование двойного указателя, 1-10 строчку.

 

<== предыдущая лекция | следующая лекция ==>
Упражнение 1.Определение коэффициента жесткости пружины при статическом нагружении. | Функции. Это поименованная часть программы, которая может вызываться из другой части программы необходимое число раз
Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.007 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал