Передача одномерных массивов как параметров функции
При использовании массива как параметра функции, в функцию передается указатель на его первый элемент, т. е. массив всегда передается по адресу. При этом теряется информация о количестве элементов в массиве, поэтому размерность массива следует передавать как отдельный параметр. Так как в функцию передается указатель на начало массива (передача по адресу), то массив может быть изменен за счет операторов тела функции.
Пример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);
}
Дата добавления: 2015-08-26; просмотров: 474;