КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Локальные и глобальные переменныеПеременные, которые используются внутри данной функции, называются локальными. Память для них выделяется в стеке, поэтому после окончания работы функции они удаляются из памяти. Нельзя возвращать указатель на локальную переменную, т. к. память, выделенная такой переменной будет освобождаться. int*f() { int a; . . . . return&a;// НЕВЕРНО } Глобальные переменные – это переменные, описанные вне функций. Они видны во всех функциях, где нет локальных переменных с такими именами. Пример: int a,b;//глобальные переменные void change() { int r;//локальная переменная r=a;a=b;b=r; } void main() { cin>>a,b; change(); cout<<”a=”<<a<<”b=”<<b; } Глобальные переменные также можно использовать для передачи данных между функциями, но этого не рекомендуется делать, т. к. это затрудняет отладку программы и препятствует помещению функций в библиотеки. Нужно стремиться к тому, чтобы функции были максимально независимы, а их интерфейс полностью определялся прототипом функции. Функции и массивы Передача одномерных массивов как параметров функции При использовании массива как параметра функции, в функцию передается указатель на его первый элемент, т. е. массив всегда передается по адресу. При этом теряется информация о количестве элементов в массиве, поэтому размерность массива следует передавать как отдельный параметр. Так как в функцию передается указатель на начало массива (передача по адресу), то массив может быть изменен за счет операторов тела функции. Пример1: Удалить из массива все четные элементы #include <iostream.h> #include <stdlib.h>
int form(int a[100]) { int n; cout<<"\nEnter n"; cin>>n;
for(int i=0;i<n;i++) a[i]=rand()%100; return n; } void print(int a[100],int n) { for(int i=0;i<n;i++) cout<<a[i]<<" "; cout<<"\n"; }
void Dell(int a[100],int&n) { int j=0,i,b[100]; for(i=0;i<n;i++) if(a[i]%2!=0) { b[j]=a[i];j++; } n=j; for(i=0;i<n;i++)a[i]=b[i];
}
void main() { int a[100]; int n; n=form(a); print(a,n); Dell(a,n); print(a,n); } Пример 2 Удалить из массива все элементы, совпадающие с первым элементом, используя динамическое выделение памяти. #include <iostream.h> #include <stdlib.h> int* form(int&n) {
cout<<"\nEnter n"; cin>>n; int*a=new int[n];//указатель на динамическую область памяти for(int i=0;i<n;i++) a[i]=rand()%100; return a; } void print(int*a,int n) { for(int i=0;i<n;i++) cout<<a[i]<<" "; cout<<"\n"; }
int*Dell(int *a,int&n) { int k,j,i; for(k=0,i=0;i<n;i++) if(a[i]!=a[0])k++; int*b; b=new int [k]; for(j=0,i=0;i<n;i++) if(a[i]!=a[0]) { b[j]=a[i];j++; } n=k; return b; }
void main() { int *a; int n; a=form(n); print(a,n); a=Dell(a,n); print(a,n); }
|