Вот некоторые заметки:
Когда вы присваиваете / передаете / печатаете массив и, используя имя массива, вы фактически передаете ячейку памяти первого элемента в массиве (указатель). Так что, когда вы пишете:
printf("Arrayone %d\n", arrayOne);
Вы увидите адрес памяти первого элемента печатного массива. Если вы хотите распечатать весь массив, вам нужно будет пройти через него. В этом случае вы печатаете 1000 целых чисел, что может быть нежелательно.
void printArray(int * array, size_t len)
{
while(len--)
{
printf("%d ", *array++);
}
}
Чтобы получить количество элементов в массиве, вы можете сделать что-то вроде этого:
sizeof(arrayOne) / sizeof(arrayOne[0])
и вы можете поместить его в макрос следующим образом:
#define ARRAY_SZ(x) (sizeof(x) / sizeof((x)[0]))
и назовите это так:
ARRAY_SZ(arrayOne);
Вы не можете получить размер массива, если вы получаете массив в функции (он распался на указатель), вместо этого вы должны также передать размер массива в функцию. Здесь, поскольку вы инициализируете массивы размером MAXIMUM
, нам на самом деле не нужно вычислять размер массива, но мы можем просто показать, что он работает.
Если вы хотите вернуть массив (как в addArrays()
), вы должны создать пустой массив и передать его функции, тогда функция может обновить массив с результатом.
При циклическом просмотре массива вы никогда не захотите делать array[maximum]
, потому что индексы массива варьируются от 0
до maximum - 1
#include <stdio.h>
#define MAXIMUM 1000
#define ARRAY_SZ(x) (sizeof(x) / sizeof((x)[0]))
int sumArrays(int arr1[], int arr2[]);
int addArrays(int arr1[], int arr2[]);
int main()
{
int arrayOne[MAXIMUM];
int arrayTwo[MAXIMUM];
int arrayThree[MAXIMUM];
for(int i = 0; i < MAXIMUM; i++)
arrayOne[i] = i;
printf("Array one size %d\n", ARRAY_SZ(arrayOne));
for(int j = 0; j < MAXIMUM; j++)
arrayTwo[j] = j;
printf("Array Two size %d\n", ARRAY_SZ(arrayTwo));
printf(" The sum of the arrays is : %d\n",sumArrays(arrayOne, arrayTwo, ARRAY_SZ(arrayOne)));
addArrays(arrayOne, arrayTwo, arrayThree, MAXIMUM);
return 0;
}
int sumArrays(int arr1[],int arr2[], size_t len)
{
int *ptr_1;
int *ptr_2;
ptr_1 = &arr1[0];
ptr_2 = &arr2[0];
int sum;
for(int i = 0; i < len; i++){
sum += *ptr_1 + i;
sum += *ptr_2 + i;
}
return sum;
}
void addArrays(int arr1[], int arr2[], int result[], size_t len){
int *ptr1 = arr1;
int *ptr2 = arr2;
int sum = 0;
int i = 0;
for(int i = 0; i < len; i++){
sum = *ptr1 +i;
sum += *ptr2 +i;
result[i] = sum;
}
}