Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
konspekt_1_semestr.doc
Скачиваний:
12
Добавлен:
02.08.2019
Размер:
654.34 Кб
Скачать

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

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

Т.к. работаем с указателями, то информация о количестве элементов массива теряется, и следует передавать его размерность через отдельный параметр (в случае массива символов, то есть строки, ее фактическую длину можно определить по положению нуль-символа):

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

Во-первых, он может быть объявлен как массив, как показано ниже:

#include <stdio.h>

void vivod(int num[10], int n);

int main(void)

{

int t[10], i;

for(i=0; i<10; i++) t[i]=i;

vivod (t,10);

return 0;

}

void vivod (int num[10])

// void display(int num[],int n)

// void display(int *num,int n)

{

int i;

for(i=0; i<n; i++) printf(“%d “, num[i]);

}

Все, приведенные выше, три способа объявления параметра приводят к одинаковому результату – указателю.

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

Пример Даны два одномерных массива. Вывести упорядоченные массивы , и упорядоченный массив, объединенный из элементов двух массивов

#include<stdio.h>

#include<conio.h>

void input(float *,int );

void sort(float *,int );

void output(float *,int );

main()

{

int i,j,k,n1,n2;

printf("Vv n1 and n2:");

scanf("%d%d",&n1,&n2);

float *a=new float[n1];

float *b=new float[n2];

float *c=new float[n1+n2];

input(a,n1);

input(b,n2);

sort(a,n1);

sort(b,n2);

output(a,n1);

output(b,n2);

for (i=j=k=0;i<n1+n2;i++)

if((a[j]<=b[k]||k>=n2)&&j<n1) {c[i]=a[j];j++;}

else {c[i]=b[k];k++;}

output(c,n1+n2);

getche();

return 0;

}

void input(float *a,int n )

{

int i;

for(i=0;i<n;i++)

{printf("Vv %3d element:",i+1);

scanf("%f",&a[i]);

}

}

void sort(float *a,int n)

{

int i,j;

float tmp;

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

{tmp=a[i];

for(j=i-1;j>=0;j--)

{if(tmp>a[j]) break;

a[j+1]=a[j];

}

a[j+1]=tmp;

} }

void output(float *a,int n)

{int i;

for(i=0;i<n;i++)

printf("%.3f ",a[i]);

printf("\n");

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]