Это должно работать правильно, позвольте мне попытаться объяснить, почему я внес эти изменения.
#include <stdio.h>
#define MAX_LENGTH 5 //preprocessor directive
void store(int arr1[]) {
int i;
for(i = 0; i < MAX_LENGTH; i++) {
printf("Value %d: ", i+1);
printf("\n");
scanf("%d", &arr1[i]);
}
for(i = 0; i < MAX_LENGTH; i++) {
printf("Element %d: %d", i, arr1[i]); //maybe also i+1?
printf("\n");
}
}
int main()
{
int arr[MAX_LENGTH];
store(arr); //only one parameter needed
return 0;
}
Массив сам по себе является указателем, указывающим на область памяти, массив [0] - это первый элемент, массив [1] - это область памяти первого элемента плюс размер типа данных, в данном случае - целое число. Поэтому, если вы хотите передать его функции в качестве указателя, вам не нужно указывать, что это указатель, и при этом вам не нужно указывать функции, что это указатель.
Функция sizeof () считает биты внутри массива, что означает, что вам нужно разделить его на тип данных (лучше сделать это так, чем использовать фиксированное число, потому что размер целого числа, например, может варьироваться в зависимости от машины).
int i = sizeof(arr1) / sizeof(arr1[0]) //brackets indicate single integer
Поскольку вы еще не инициализировали никаких значений, вы не получите 5 из этого, поэтому я принял решение установить значение с помощью #define вверху, это директива препроцессора, позволяющая вам установить значение, к которому вы можете получить доступ в обеих ваших функциях.
Я также решил удалить переменную place, это казалось ненужным, потому что вы могли бы также использовать i, если вы хотите использовать его, вы должны установить для него начальное значение, иначе оно просто будет использовать любое значение, которое хранится в ячейке памяти, что приводит к ошибкам.