Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект лекций.DOC
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
268 Кб
Скачать
☆

Void show(int a) // локальная переменная а

{

cout <<  локальная переменная а= << a << endl;

cout <<  глобальная переменная а= << ::a << endl;

}

Void main(void)

{

int b=2002;

show(b);

}

результат:

локальная переменная а=2002

глобальная переменная а=1001

Модификаторы переменных.

В языке С имеется несколько модификаторов, которые изменяют область действия и время жизни переменных.

Модификатор

применение

область действия

выделение памяти

объяснение

auto

локальная переменная

блок

временное

для локальных переменных применяется по умолчанию

register

локальная переменная

блок

временное

предполагается, что переменная располагается в машинном регистре

extern

блок

информирует компилятор, что переменная определяется в другом блоке

static

локальная переменная

блок

постоянное

область действия соответствует локальной переменной, а время жизни -глобальной

static

глобальная переменная

файл

постоянное

ограничивает область действия глобальной переменной текущим файлом

Пример №7: определить, сколько целых чисел в интервале от 1 до 500 являются степенью цифры 3.

27=33, 81=34

#include <iostream.h>

#include <math.h>

Int step3(int a)

{

if (pow(а, 1./3.)==int(pow(а, 1./3.))) return 1;

return 0;

}

Void main ()

{ int i, kol=0;

for (i=1; i<=500; i++)

if (step3(i) != 0)

{cout << setw(5)<<i; kol++;}

cout << kol-1 << “чисел – степени тройки”;

}

Пример №8. Вычислить f(x,y)+f(x-y,x/y), где

#include <iostream.h>

#include <math.h>

float f(float a, float b) //a, b формальные параметры

{

float f= fabs(a+b)/(a*b);return f; } // f локальный параметр

Void main ()

{ float x, y, z; //x, y, z локальные параметры

cout << “введите два числа”;cin>>x>>y;

z=f(x,y)+f(x-y,x/y);

cout<<z;

}

Параметры по значению и параметры по ссылке.

Стек – это область памяти для временного хранения данных. При вызове функции в стеке выделяется место для формальных параметров, затем в это выделенное место заносятся фактические параметры. Функция использует и меняет значения в стеке, но при выходе из функции измененные значения параметров теряются. Т. е. функция не может изменить переменные, указанные в качестве фактических параметров при обращении к ней.

Если при вызове функции в качестве ее параметров используются имена переменных, то такие параметры передаются в функцию по значению, и функция не может изменить значение параметров. Для того, чтобы функция могла изменять свои параметры, надо передавать в качестве параметра не имя переменной, а ее адрес. Такой прием называется передачей параметров по ссылке. Внутри функции параметры используются как указатели.

Пример. Функция swap служит для перемены мест аргументов. В первой функции используются параметры по значению, во второй параметры по ссылке.

#include <iostream. h>

void swap1 (int a, int b);

void swap2 (int *a, int *b);

void main(void)

{

int x=5, y=10;

cout << x= << x << y= << y << endl;

swap1 (x, y);

cout << x= << x << y= << y << endl;

swap2 (&x, &y); // в функцию передаются адреса переменных

cout <<  x= << x << y= << y << endl;

}

void swap1 (int a, int b)

{

int x; //в теле функции а и в меняются местами

x=a; a=b; b=x;

}

void swap2 (int *a, int *b)

{

int x;

x=*a; *a=*b; *b=x;

}

результат:

x=5 y=10

x=5 y=10

x=10 y=5

Следовательно, при вызове функции можно передать адрес параметра с помощью операции &, внутри функции в заголовке ставится * перед переменной, и далее в функции также ставится * перед именем переменой. Для изменения параметров функцией можно также использовать ссылки. Ссылка представляет собой второе имя переменной (псевдоним). Перед ссылкой ставится знак &. Ссылку необходимо инициализировать:

<тип> &<второе имя переменной>=<первое имя переменной >;

float &a=b;

В программе можно использовать как само имя переменной, так и ссылку на нее. Ссылки могут использоваться в качестве параметров функций. Функция может изменять значение такого параметра без использования указателей.

Пример:

#include <iostream. h>