double arrow

Передача строк в качестве параметров функций

Передача одномерных массивов как параметров функции

Функции и массивы

Локальные и глобальные переменные

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

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);

}

Строки при передаче в функции могут передаваться как одномерные массивы типа char или как указатели типа char*. В отличие от обычных массивов в функции не указывается длина строки, т. к. в конце строки есть признак конца строки /0.

Пример: Функция поиска заданного символа в строке

int find(char *s,char c)

{

for (int I=0;I<strlen(s);I++)

if(s[I]==c) return I;

return –1

}

С помощью этой функции подсчитаем количество гласных букв в строке.

void main()

{

char s[255];

gets(s)

char gl=”aouiey”;

for(int I=0,k=0;I<strlen(gl);I++)

if(find(s,gl[I])>0)k++;

printf(“%d”,k);

}


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



Сейчас читают про: