Int mean (int *iPtr, int n)
{ int index;
long sum;
if (n0)
{ for (index=0, sum=0; index
sum+=*(iPtr+index);
return sum/n; // возвращает целое sum / n
}
else
{ cout
return 0;
}
}
При такой замене в вызове функции ничего менять не придется, так как имя массива и указатель в данном случае взаимозаменяемы. Поэтому можно присваивать указателю адрес первого элемента, используя просто имя массива.
Int iarray [10];
int *iPtr = iarray; // То же самое, что iPtr=iarray[0].
В С++ указатели можно увеличивать или уменьшать. Указатель, увеличенный на 3, будет указывать на четвертый элемент массива (эквивалентно array[3]). Другими словами, увеличивая указатель на единицу, мы в действительности увеличиваем адрес, который он представляет, на размер объекта связанного с ним типа.
Так как указателям типа void не соответствует никакой тип данных, к ним нельзя применять арифметические операции.
Указатель можно индексировать точно так же, как массив. Компилятор в действительности преобразует индексацию в арифметику указателей: iarray[3]=10; представляется как *(iarray+3)=10;
Понятие ссылки
В С++ имеется несколько видоизмененная форма указателя, называемая ссылкой. Ссылка на некоторую переменную может рассматриваться как указатель, который при употреблении всегда разыменовывается. Однако для ссылки не требуется дополнительного пространства памяти: она является просто другим именем (псевдонимом) переменной.
Для определения ссылки применяется унарный оператор .
Пример 9.10.
# include
int value=10;
int refval=value; // Ссылка на value
int main (void)
{ cout
refval+=5; // Модификация через ссылку
cout
cout
cout
return 0;
}
Хотя ссылка может быть определена как псевдоним переменной, прежде всего ссылки применяются для параметров функций и возвращаемых функциями значений. Вызов функции, ожидающей в качестве параметра ссылочную переменную, синтаксически не отличается от вызова, в котором параметр передается значением. Чтобы указать, что функция ожидает передачу параметра ссылкой, в прототипе перед именем переменной ставится модификатор . Рассмотрим пример использования параметров-ссылок.
Пример 9.11.
# includе
void Inc_val (int i) // Получает параметр-значение
{ i++; // Модификация не влияет на оригинал
}
void Inc_ptr (int *i) // Получает адрес оригинала
{(*i)++; // Модифицирует оригинал путем косвенной адресации
}
void Inc_ref (inti) // Получает параметр-ссылку
{i++; // Модифицирует оригинал!
}
int main(void)
{ int j=10;
cout
Inc_val (j);
cout
Inc_ptr (j);
Cout
Inc_ref (j);
Cout
return 0;
}
При вызове функции, ожидающей передачи ссылки, компьютер неявно передает адрес специфицированного параметра. Внутри самой функции компилятор транслирует все обращения к параметру, разыменовывая переданный адрес. При этом:
1)вызывающей функции не требуется применять операцию взятия адреса ();
2)вызываемая функция избавляет от использования косвенных операций (*).
Ссылка может быть использована как тип, возвращаемый функцией. Это позволяет присваивать функции значение.
Пример 9.12. Ссылка как возвращаемый функцией тип.
#include
const int arraySize = 0xF;
static int valArray[arraySize];
int valueAt(int indx)
{ return valArray [indx];
}
int main (void)
{ for (int I=0; I
valueAt (i)=1
for (I=0; I
cout
return 0;
}
Функцию valueAt(int) можно применять как для чтения элемента с определенным индексом, так и для присваивания нового значения этому элементу.
Контрольные вопросы
7. Каков допустимый уровень вложенности функции в языке С?
2. Как определить функцию? Что такое прототип функции? Всегда ли обязательно объявление прототипов?
3. Как передать информацию функции?
4. В чем разница между формальными и фактическими аргументами? Где описываются аргументы?
5. Где описываются локальные переменные функции?
6. Для чего служит оператор return? Обязательно ли его использование?
7. Проверьте, все ли правильно в следующем определении функции:
hallo (num)
{ int num, count;
for (count =1; count
cout
}
Варианты заданий
Номер варианта | Задание |
1, 21 | Задатьзначения вещественным элементам массивов А = {ai|i = 0,1,…,7}, B = {bjЅj = 0,1,…,5}, C = {ckЅ k =0,1,…,9}, D = {dnЅn = 0,1,…,9} и вычислить |
Номер варианта | Задание |
2, 22 | Задатьзначения целочисленным элементам массивов А = {aj|i = 0, 1,…, 8}, B = {bjЅj = 0, 1,…,5}, C = {ckЅ k =0,1,…,6} и вычислить |
3, 23 | Задатьзначения целочисленным элементам массивов М = {miЅi = 0, 1,…,7}, L = {ljЅj = 0, 1,…,6}, C = {ckЅ k = 0,1,…,8} и вычислить |
4, 24 | Задатьзначения вещественным элементам массивов А = {aiЅ i = 0, 1,…, 6}, B = {bjЅj = 0, 1, 2, 3}, C = {ckЅ k = 0, 1, 2,…, 10} и вычислить |
5, 25 | Задатьзначения целочисленным элементам матриц А= {aij}, B = {bij},где i = 0, 1, 2, 3; j = 0, 1, 2,…, 6 исформировать массивы С и D, состоящие из максимальных элементовстолбцов матриц А и В соответственно. |
6, 26 | Задать значения вещественным элементам массивов A = {ai}и B = {bi}, где i = 0, 1, 2,…,9 и вычислить элементы массивов X ={xi} и Y = {yi} по формулам: |
7, 27 | Задатьзначения целочисленным элементам матриц M = {mij}и N = {nij}, где i = 0, 1, 2,…, 7; j = 0, 1, 2,…, 5 и сформироватьмассивы С и D, состоящие из максимальных элементов строк матриц M и N соответственно. |
8, 28 | Задать значениявещественным элементам матриц А = {аij}и Q = {qij}, где i = 0, 1, 2,…, 6; j = 0, 1, 2,…, 4 и сформировать массивы B и R, состоящие изминимальных элементов столбцов матриц A и Q соответственно. |
9, 29 | Задать значенияцелочисленным элементам матриц P = {pij}и Q = {qij}, где i = 0, 1, 2,…, 4; j = 0, 1, 2,…, 7 и сформировать массивы R и T из суммотрицательных элементов строк матриц P и Q соответственно. |
10, 30 | Задатьзначения вещественным элементам матриц С = {сij}и D = {dij}, где i = 0, 1, 2,…, 5; j = 0, 1, 2,…, 5 и сформировать массивы X и Y из произведенийположительных элементов столбцов матриц C и D соответственно. |
Задать значенияцелочисленным элементам матриц W = {wij} и Z = {zij},где i = 0, 1, 2; j = 0, 1, 2,…, 7 исформировать массивы T и S соответственно из элементов матриц W и Z,больших заданного числа Р. |
Номер варианта | Задание |
Задать значения вещественным элементам матриц B = {bij} и D = {dij},где i = 0, 1, 2,…,7; j = 0, 1, 2, 3, исформировать массивы Y и Z, состоящиесоответственно из элементов матриц B и D, меньших заданного числа R. | |
Задатьзначения вещественным элементам матриц Р = {рij},Q = {qij}, где i = 0, 1, 2,…, 5; j = 0, 1, 2,…, 8 и сформировать массивы R и T, состоящие изминимальных элементов столбцов матриц P и Q соответственно. | |
Задать значенияцелочисленным элементам матриц A = {aij}, B = {bij}, где i = 0, 1, 2,…, 5; j = 0, 1, 2, 3 ивычислить элементы массивов X = {xij}, Y = {yij}по формулам: | |
Задать значения вещественным элементам массивов A = {ai},B = {bi}, C = {ci},где i = 0, 1, 2,…,6 и вычислить | |
Задатьзначения целочисленным элементам матриц A = {aij},B = {bij}, где i = 0, 1; j= 0, 1, 2 и вычислить элементы матриц Y = {yij}, Z = {zij}по формулам | |
Задать значения целочисленным элементам массивов С = {сi}и D = {di}, где i = 0, 1,2,…, 6 и вычислить элементы массивов S = {si} и T = {ti},где i = 0, 1, 2,…, 6, по формуле: | |
Задатьзначения вещественным элементам массивов X = {xi|i = 0, 1, 2,…, 5}, Y = {yj| j = 0, 1, 2,…, 7}, Z = {zk|k = 0, 1, 2,…, 9}, и вычислитьесли | |
Задать значения вещественным элементам четырехквадратных матриц 5-го порядка и вычислить сумму квадратов значений той изматриц, у которой наибольшая сумма диагональных элементов. | |
Задать значения целочисленным элементам матриц А = {аij},B = {bij}, где i = 0, 1, 2, 3,4 j = 0, 1, 2, 3 и вычислить величины S=x0/x4+x1/x3 + … +x4/x0, T=y0/y4+ y1/y3+ … + y4/y0, где xi,yi — максимальные элементы i-хстрок матриц А и В соответственно. |
Статьи к прочтению:
- Пример и методические указания по оформлению практической части курсовой работы
- Примерный перечень вопросов к зачету
Арифметика указателей.Указатели и массивы. Массив это указатель.C++ для начинающих. Урок #47
Похожие статьи:
-
Использование кавычек для отмены значения символа пробел
Кавычки, как и обратная косая черта, часто используются для отмены специального значения пробела. Shell интерпретирует пробел в командной строке как…
-
Пример 3. написать функцию swap с использованием ссылок.
НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ ТОМСКИЙ ПОЛИТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ» УТВЕРЖДАЮ Директор ИК ____________ М.К. Сонькин «____»_____________2011 г. Т.Е….