КАТЕГОРИИ: Архитектура-(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) |
Конец лекции
Ссылки (reference)Ссылка в программировании — это объект, указывающий на определенные данные, но не хранящий их. Ссылку можно рассматривать как синоним имени, указанного при ее инициализации, или как указатель, который автоматически разыменовывается. Ссылки в C++ должны быть связаны с каким-либо объектом. Таким образом, «нулевые ссылки» в C++ отсутствуют. Пример 7.7. //Вычисление n! Передача параметров Все параметры в функции C++ передаются по значению, т. е. при вызове функции в стек заносится копия значения фактического параметра, и операторы в теле функции работают с этой копией. Поэтому значения фактических параметров, которые переданы в функцию, не изменяются. Передача параметров по значению предусматривает следующие действия: 1.При компиляции функции выделяются участки памяти для формальных параметров. 2.Формальные параметры - это внут-ренние объекты функции. Для параметров типа float формируются объекты типа double. Для параметров типа char, short intсоздаются объекты типа int. 3.Если параметром является массив, то формируется указатель на начало этого массива и он служит представлением массива-параметра в теле функции. Локальные переменные В функции можно использовать не только переданные ей значения, но и объявлять собственные переменные внутри тела функции. Такие переменные называются локальными и существуют только внутри функции. После выхода из функции они удаляются из памяти. Аргументы, переданные функции, так же являются локальными переменными данной функции. Вызов функции Для вызова функции используется конструкция: имя_функции ([ фактические_параметры ]) При вызове функции вместо формальных подставляются фактические параметры – значения, с которыми функция будет работать. Вызов функции может находиться в любом месте программы, где по синтаксису допустимо выражение того типа, который формирует функция. В определении, в объявлении и при вызове одной и той же функции типы и порядок следования параметров должны совпадать.
После заголовка записывается тело функции в виде блока. Аргументы x, n c называются формальными параметрами. Это переменные, которые определены в теле функции (т.е. к ним можно обращаться только в теле функции). При определении функции программа не знает их значения. В скобках – формальные параметры. Специальная инструкция return [ (значение) ]; позволяет завершить работу функции и вернуться в вызвавшую функцию. Может иметь различный вид. Функция может содержать несколько инструкций return. Выражение, стоящее в return преобразуется к типу возвращаемого функцией значения. int f1() {return 1}; //ok //вызов int max3 (int a, int b, int c);
|
|
|
Второй способ реализации этой функции: Функция может возвращать значения любого типа, кроме массива и функции. Пример 7.6. Функция печати кодировочной таблицы. Вызов этой функции:
int step2(int x,int n)
{int r=1;
while (n!=0)
{
if (n%2==1) r=r*x;
x=x*x;
n=n/2;
}
return r;
}
int main ()
{ int x=10,n=7,a,b,c,y;
cout << ”Enter a, b”;
cin >> a >> b;
c=Step2(a,b);
y=Step2(x,n);
cout << ”c=” << c << endl;
cout << ”y=” << y << endl;
cout << ”15 в 4-ой=” << Step2(15,4)<< endl;
return 0;
}
Но может вернуть указатель на область памяти, в которой хранится массив и может вернуть указатель на функцию (об этом позже).
Если в качестве типа возвращаемого значения задан тип void, то не требуется возвращать значение.
Модификаторы, если есть, определяют класс памяти, что ограничивает видимость функции и других внешних определений.
Функция с классом памяти static невидима вне содержащего ее файла. По умолчанию, предполагается extern.
Есть функции, у которых отсутствует список формальных параметров, в этом случае записывают пустые скобки, также допускается указывать тип void.
Например:
void Сode()
или
void Сode(void)
void Сode ()
{
printf("Current table: \n");
for (int c=0;c<=255;c++)
{
printf("%3d-%c ",c,c);
if((c+1)%11==0)
printf("\n");
}
}
Сode();
Обратите внимание, что скобки при вызове функции необходимо указывать даже тогда, когда список фактических параметров пуст.
В примере используется форматированный вывод, поэтому нужно подключить файл stdio.h:
#include <stdio.h>
4.
Вычисляются значения выражений, использованных в качестве фактических параметров при вызове функции.
5. Значения выражений-фактических параметров заносятся в участки памяти, выделенные для формальных параметров функции.
6. В теле функции выполняется обработка с использованием значений внутренних объектов-параметров, и результат передается в точку вызова функции как возвращаемое ею значение.
7. Никакого влияния на фактические параметры функция не оказывает.
|
|
Для того чтобы обеспечить изменение передаваемых в функцию фактических параметров, необходимо явно передать адрес изменяемого параметра. Этого можно достичь двумя способами. Переменные-указатели Для объявления указателя нужно, перед именем переменной поставить “*”. Унарный оператор * возвращает значение переменной, находящейся по данному адресу. Ссылочный тип появился в языке C++ и используется главным образом при работе с модифицируемыми параметрами функций. Пример 7.14. Поменять местами значения двух переменных a и b.
Пример 7.12. Поменять местами значения двух переменных a и b.
void Swap (int a, int b)
{
tmp = a;
a = b;
b = tmp;
}
…… int x=10, y=100;
Swap(x,y);
Обмена нет!!!
Во-первых, можно в качестве формального параметра описать указатель на тип, с которым будем работать.
Во-вторых, можно использовать ссылки.
В памяти могут находится данные разных типов, переменные и константы.
Указатель – это переменная, которая содержит адрес памяти. Этот адрес как правило является адресом некоторой другой переменной.
Тип данных переменных, на который указывает указатель называется базовым типом данных. Стандартный вид обьявления указателя:
тип * имя
int c = 100;
int *p =&c;
int *ip, *iq; // указатели на целые числа
double *fp; // указатель на вещественные
char *cp; // указатель на символьные
int x;
Oператоры для работы с указателями
Унарные операторы * и & имеют более высокий приоритет, чем арифметические операторы,
Oператор & - этот оператор возвращает адрес объекта, так что инструкция
ip = &x;
присваивает указателю ip адрес переменной x.
Для получения значение переменной х, адрес которой присвоен ip, нужно записать *iр.
Этот оператор называют оператором разыменования или косвенного доступа.
Пример 7.13. Поменять местами значения двух переменных a и b.
void Swap (int *px, int *py)
{
int tmp = *px;
*px = *py;
*py = tmp;
}
…… int a=10, b=100;
Swap(&a,&b);
Ссылочный тип, как и указатель, основан на некотором базовом типе, его описание имеет вид: базовый_тип &
int c = 100;
int &p = c;
int &r; //Ошибка
р++; //с=101;
void Swap(int &a, int &b)
{
tmp = a;
a = b;
b = tmp;
}
…… int a=10, b=100;
Swap(a,b);
|
|
|
Дата добавления: 2013-12-13; Просмотров: 445; Нарушение авторских прав?; Мы поможем в написании вашей работы!
Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет