Копирование элементов массива - C (СИ)
Формулировка задачи:
Подскажите пожалуйста как написать функцию для копирования всех элементов двух одномерных массивов в третий одномерный массив.
Решение задачи: «Копирование элементов массива»
textual
Листинг программы
#include <stdio.h>
#define N 6
#define M 4
#define K 10
int *copyarr(int *destArr, size_t destArrLen, int *srcArr, size_t srcArrLen, int *p )
{
int *sa = srcArr;
int *sae = srcArr+srcArrLen;
if(p!=NULL)
{
if((destArrLen-(p-destArr))<srcArrLen)return NULL;
int * pa = p;
while(*sa!=*sae){*pa = *sa; ++sa; ++pa; } return pa;
}
else
{
if(destArrLen < srcArrLen)return NULL;
int *da = destArr;
while(*sa!=*sae){*da = *sa; ++sa; ++da; } return da;
}
}
int main(void)
{
int c[K], a[N] = {1,2,3,4,5,6}, b[M] = {7,8,9,10};
int *p; int i;
if((p = copyarr(c, K, a, N, NULL))==NULL)printf("Error!\n");
if(copyarr(c, K, b, M, p)==NULL)printf("Error!\n");
for(i=0; i<K; ++i)printf("%d ", c[i]);
return 0;
}
Объяснение кода листинга программы
- В функции
copyarrидет копирование элементов из одного массива в другой с указанием размера и промежуточной переменнойp, которая указывает на место в целевом массиве, с которого нужно начать копирование. - Если
pне равноNULL, то проверяется, достаточно ли места в целевом массиве для копирования. Если места недостаточно, то возвращаетсяNULL. - Копирование элементов выполняется с помощью цикла
while, который продолжается до тех пор, пока не будет достигнут конец исходного массива. - В функции
mainсоздается массивcс длинойK, инициализируются массивыaиb, и задаетсяpкак указатель на первый элемент массиваc. - Вызывается функция
copyarrдля копирования элементов из массиваaвcс указаниемpкак начального индекса вc. - Вызывается функция
copyarrдля копирования элементов из массиваbвcс указаниемpкак начального индекса вc. - Выводится содержимое массива
c.