Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Передача многомерных массивов в функциюПри передаче многомерных массивов в функцию все размерности, кроме первой, должны указываться в квдратных скобках. По определению многомерные массивы в С и С++ не существуют. Если мы описываем массив с несколькими индексами, например, массив int mas[3][4], то это означает, что мы описали одномерный массив mas, элементами которого являются указатели на одномерные массивы int[4]. Пример: Транспонирование квадратной матрицы Если определить заголовок функции: void transp(int a[][],int n){…..} – то получится, что мы хотим передать в функцию массив указателей на элементы (массивы) с неизвестными размерами, поэтому компилятор выдаст ошибку. Самый простой вариант решения этой проблемы – определить функцию следующим образом: void transp(int a[][4],int n), тогда размер каждой строки будет 4, а размер массива указателей будет передан в параметре n. #include<iostream.h> const int N=4;//глобальная переменная void transp(int a[][N],int n) { int r; for(int i=0;i<n;i++) for(int j=i+1;j<n;j++){ r[a[i][j];a[i][j]=a[j][i];a[j][i]=r; } } int main() { int mas[N][N]; for(int i=0;i<N;i++) for(int j=0;j<N;lj++) cin>>mas[i][j]; for(i=0;i<N;i++){ for(j=0;j<N;j++) cout<<mas[I][j]; cout<<”\n”; } transp(N,mas); for(i=0;i<N;i++){ for(j=0;j<N;j++) cout<<mas[i][j] cout<<”\n”; } } 12.6. Функции с начальными (умалчиваемыми) значениями параметров В определении функции может содержаться начальное (умалчиваемое) значение параметра. Это значение используется, если при вызове функции соответствующий параметр опущен. Все параметры, описанные справа от такого параметра, также должны быть умалчиваемыми. Пример: void print(char*name=”Номер дома: ”,int value=1){ cout<<”\n”<<name<<value; } Вызовы: 1. print(); Вывод: Номер дома: 1 2. print(“Номер квартиры”,15); Вывод: Номер квартиры: 15 3. print(,15); – ошибка, т. к. параметры можно пускать только с конца Чтобы функцию можно было вызвать последним способом, ее следует переписать так: void print(int value=1, char*name=”Номер дома: ”) {cout<<”\n”<<name<<value;} Вызовы: 1. print(); Вывод: Номер дома: 1 2. print(15); Вывод: Номер дома: 15 3. print(6, “Размерность пространства”); Вывод: Размерность пространства: 6
12.7. Подставляемые (inline) функции Некоторые функции в С++ можно определить с использованием служебного слова inline. Такая функция называется подставляемой или встраиваемой. Например: inline float Line(float x1,float y1,float x2=0, float y2=0){ return sqrt(pow(x1-x2)+pow(y1-y2,2));} /* функция возвращает расстояние от точки с координатами (x2, y2) (по умолчанию центр координат) до точки с координатами (x1, y1). Обрабатывая каждый вызов подставляемой функции, компилятор пытается подставить в текст программы код операторов ее тела. Спецификатор inline определяет для функции так называемое внутреннее связывание, которое заключается в том, что компилятор вместо вызова функции подставляет команды ее кода. При этом может увеличиваться размер программы, но исключаются затраты на передачу управления к вызываемой функции и возврата из нее. Подставляемые функции используют, если тело функции состоит из небольшого количества простых операторов. Подставляемыми не могут быть: - рекурсивные функции; - функции, у которых вызов размещается до ее определения; - функции, которые вызываются более одного раза в выражении; - функции, содержащие циклы, переключатели и операторы переходов; - функции, которые имеют слишком большой размер, чтобы сделать подстановку.
|