Пример использования массивов указателей
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++ вслед за С позволяет писать функции с переменным числом параметров. Одним из простых примеров может служить функция, вычисляющая среднее арифметическое своих аргументов. Другой уже классический пример — функция сцепления произвольного количества строк, которая является естественным обобщением функции сцепления двух строк.
Функция 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 Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|