КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Подставляемые (inline) функции
Функции с начальными (умалчиваемыми) значениями параметров Передача многомерных массивов в функцию При передаче многомерных массивов в функцию все размерности должны передаваться в качестве параметров. По определению многомерные массивы в Си и СИ++ не существуют. Если мы описываем массив с несколькими индексами, например, массив int mas[3][4], то это означает, что мы описали одномерный массив mas, элементами которого являются указатели на одномерные массивы int[4]. Пример: Транспонирование квадратной матрицы Если определить заголовок функции: void transp(int a[][],int n){…..} – то получится, что мы хотим передать в функцию массив с неизвестными размерами. По определению массив должен быть одномерным, и его элементы должны иметь одинаковую длину. При передаче массива ничего не сказано и о размере элементов, поэтому компилятор выдаст ошибку. Самый простой вариант решения этой проблемы определить функцию следующим образом: void transp(int a[][4],int n), тогда размер каждой строки будет 4, а размер массива указателей будет вычисляться. #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=0;j<n;j++) if(I<j) { r[a[I][j];a[I][j]=a[j][I];a[j][I]=r; } } void main() { int mas[N][N]; for(int I=0;I<N;I++) for(int j=0;j<Nlj++) 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”; } } В определении функции может содержаться начальное (умалчиваемое) значение параметра. Это значение используется, если при вызове функции соответствующий параметр опущен. Се параметры, описанные справа от такого параметра также должны быть умалчиваемыми. Пример: 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 Некоторые функции в СИ++ можно определить с использованием служебного слова inline. Такая функция называется подставляемой или встраиваемой. Например: inline float Line(float x1,float y1,float x2=0, float y2=0) {return sqrt(pow(x1-x2)+pow(y1-y2,2));}//функция возвращает расстояние от точки с координатами(x1,y1)(по умолчанию центр координат) до точки с координатами (x2,y2). Обрабатывая каждый вызов подставляемой функции, компилятор пытается подставить в текст программы код операторов ее тела. Спецификатор inline определяет для функции так называемое внутреннее связывание, которое заключается в том, что компилятор вместо вызова функции подставляет команды ее кода. При этом может увеличиваться размер программы, но исключаются затраты на передачу управления к вызываемой функции и возврата из нее. Подставляемые функции используют, если тело функции состоит из нескольких операторов. Подставляемыми не могут быть: - рекурсивные функции; - функции, у которых вызов размещается до ее определения; - функции, которые вызываются более одного раза в выражении; - функции, содержащие циклы, переключатели и операторы переходов; - функции, которые имеют слишком большой размер, чтобы сделать подстановку.
Дата добавления: 2014-01-04; Просмотров: 266; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |