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


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 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 определяет для функции так называемое внутреннее связывание, которое заключается в том, что компилятор вместо вызова функции подставляет команды ее кода. При этом может увеличиваться размер программы, но исключаются затраты на передачу управления к вызываемой функции и возврата из нее. Подставляемые функции используют, если тело функции состоит из небольшого количества простых операторов.

Подставляемыми не могут быть:

- рекурсивные функции;

- функции, у которых вызов размещается до ее определения;

- функции, которые вызываются более одного раза в выражении;

- функции, содержащие циклы, переключатели и операторы переходов;

- функции, которые имеют слишком большой размер, чтобы сделать подстановку.


Date: 2016-11-17; view: 315; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.005 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию