Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Пример использования массивов указателей




int (*ptr)[6];

вводит указатель ptr на массив из шести элементов, каждый из которых имеет

тип int. Возможность создания массивов указателей позволяет экономить память при

использовании многомерных массивов.

 

Приведем текст этой программы.

#include <iostream.h>

void main()

{

const int n=5; //Количество строк.

const int m=7; //Количество столбцов.

double array[n][m]; //Основной массив.

for (int i=0;i<n;i++)

for (int j=0;j<m;j++)

array[i][j]=n-i; //Заполнение массива.

double *par[n]; //Массив указателей.

for (i=0;i<n;i++) //Цикл перебора строк.

par[i]=(double*)array[i];

//Печать массива через указатели.

cout << "\n До перестановки элементов массива указателей: ";

for (i=0;i<n;i++)

{ cout<< "\n строка " << i+1 <<": ";

for (int j=0;j<m;j++)

cout << "\t" << par[i][j];

}

//Упорядочение указателей на строки массива.

double si,sk;

for (i=0;i<n-1;i++)

{ for (int j=0, si=0;j<m;j++)

si+=par[i][j];

for (int k=i+1;k<n;k++)

{ for (j=0,sk=0;j<m;j++)

sk+=par[k][j];

if (si>sk)

{ double *pa=par[i];

par[i]=par[k];

par[k]=pa;

double a=si;

si=sk;

sk=a;

}

}

}

//Печать массива через указатели.

cout << "\nПосле перестановки элементов массива:";

for (i=0;i<n;i++)

{ cout << "\n строка " << i+1 <<": ";

for (int j=0;j<m;j++)

cout << "\t" << par[i][j];

}

cout << "\nИсходный массив остался неизменным: ";

for (i=0;i<n;i++)

{ cout << "\nstroka " << i+1 <<": ";

for (int j=0;j<m;j++)

cout << "\t" << array[i][j]; }

}

 

25) typedef-позволяет задавать новые имена типов. Пример typedef int INT; INT x=5;

Конструкция typedef позволяет задавать новые имена типов.

Tupedef int INT

Т.е теперь типы одинаковы)

Язык C++ вслед за С позволяет писать функции с переменным числом параметров. Одним из простых примеров может служить функция, вычисляющая среднее арифметическое своих аргументов. Другой уже классический пример — функция сцепления произвольного количества строк, которая является естественным обобщением функции сцепления двух строк.
Переменный список параметров задается в заголовке функции многоточием:
int f(…)
Этот заголовок не вызывает у компилятора протестов. Такая запись означает, что при определении функции компилятору неизвестны ни количество параметров, ни их типы, и он, естественно, не может ничего проверить. Количество параметров и их типы становятся известными только при вызове функции.

Функция sum

Препроцессор — это компьютерная программа, принимающая данные на входе и выдающая данные, предназначенные для входа другой программы (например, компилятора). О данных на выходе препроцессора говорят, что они находятся в препроцессированной форме, пригодной для обработки последующими программами (компилятор). Результат и вид обработки зависят от вида препроцессора; так, некоторые препроцессоры могут только выполнить простую текстовую подстановку, другие способны по возможностям сравниться с языками программирования. Наиболее частый случай использования препроцессора — обработка исходного кода перед передачей его на следующий шаг компиляции. Языки программирования C/C++ и система компьютерной вёрстки TeX

используют препроцессоры, значительно расширяющие их возможности.

Макросы - это препроцессорные "функции", т.е. лексемы, созданные с помощью директивы #define, которые принимают параметры подобно функциям. После директивы #define указывается имя макроса, за которым в скобках (без пробелов) параметры, отделенные запятыми и определение макроса, отделенное пробелом.

 

Макросы в языке Си преимущественно используются для определения небольших фрагментов кода. Во время обработки кода препроцессором, каждый макрос заменяется соответствующим ему определением. Если макрос имеет параметры, то они указываются в теле макроса; таким образом, макросы языка Си могут походить на Си-функции. Распространенная причина использования — избежание накладных расходов при вызове функции в простейших случаях, когда небольшого кода, вызываемого функцией, достаточно для ощутимого снижения производительности.

Например,

#define max(a,b) ((a) > (b)? (a): (b))

определяет макрос max, использующий два аргумента a и b. Этот макрос можно вызывать как любую Си-функцию, используя схожий синтаксис. То есть, после обработки препроцессором,

z = max(x,y);

становится

z = ((x) > (y)? (x): (y));

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

Например, если f и g — две функции, вызов

z = max(f(), g());

не вычислит один раз f()и один раз g(), и поместит наибольшее значение в z, как этого можно было ожидать. Вместо этого одна из функций будет вычислена дважды. Если функция имеет побочные эффекты, то вероятно, что её поведение будет отличаться от ожидаемого.

 

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...