C: Concatenate two arrays into a new 3rd array.
https://github.com/pereiradaniel/c_programs/blob/master/conc_arrays.c
// Concatenate two arrays into a new 3rd array
#include <stdio.h>
#include <stdlib.h> // use malloc and free
#include <string.h> // memcopy
#include "length.h"
// Function returtns pointer to an int:
// - Because space will by dynamically alloc to the heap
// for the new array!
// - Function will return a pointer to that array
// on the heap!
// In C, when an array is passed to a function, what is
// really passed is a pointer to that array. What is
// being passed is the first elem of the array.
int* concat(int* a1, size_t len1, int *a2, size_t len2);
int main (int argc, char* argv[])
{
// Initialize two arrays:
int array1[] = {0,1,2,3,4};
int array2[] = {5,6,7,8,9};
// Store the pointer returned by concat.
int* array3 = concat(array1, LENGTH(array1), array2, LENGTH(array2));
for (int i = 0; i < 10; ++i)
{
printf("array3[%d] = %d\n", i, array3[i]);
}
printf("\n");
// Free memory!
free(array3);
return 0;
}
int* concat(int* a1, size_t len1, int *a2, size_t len2)
{
// Dynamically allocate memory for new array, use malloc to dyn allocate space:
int* new_array = malloc(sizeof(int) * (len1+len2));
// Malloc will return a pointer (mem address) for a block of memory allocated
// for the new array. That pointer is stored in 'new_array'.
// Copy values from 1st array and then 2nd array.
// Use memcopy.
memcpy(new_array, a1, sizeof(int) * len1); // copy from a1 to new_array
// Store at end of a1 data inside of new_array!
// Use pointer arithmetic!
memcpy(new_array + len1, a2, sizeof(int) * len2); // copy from a2 to new_array
return new_array; // return new_array pointer
}