#c #arrays #function #pointers
Вопрос:
Итак, мне нужно получить максимальное значение из массива. Таким образом, первая строка ввода содержит количество элементов массива, а затем значения для массива. Но я действительно не понимаю, почему эта ошибка продолжает появляться, когда я передаю функции массив целочисленного типа. На данный момент мне немного сложно работать с указателями и функциями.
#include<iostream>
using namespace std;
void maxim(long long int nums[],long long int n){
int max_val=0;
for(int i=0;i<n;i ){
if(nums[i]>max_val){
max_val=nums[i];
}
}
cout<<max_val<<endl;
}
int main() {
long long int n;
cin>>n;
long long int arr[n];
for(int i=0;i<n;i ){
cin>>arr[i];
}
maxim(arr[n],n);
return 0;
}
Комментарии:
1. Вы должны пройти
arr
вместоarr[n]
«какmaxim(arr,n);
«.2.
long long int arr[n];
— Это недопустимый C . Массивы в C должны иметь размер, обозначаемый выражением во время компиляции, а не значением во время выполнения. Вместо этого используйтеstd::vector<long long> arr(n);
. Кроме того,n
он не инициализирован, и вы используете его, что неправильно.3. Итак, мне нужно получить максимальное значение из массива -это то, что вы хотите сделать? Если это так, то ваша попытка далека от того, как на самом деле достичь этой цели в C . Почему бы просто не использовать
std::min_element
?4. Это все равно неправильно. Массивы переменной длины (как у вас
long long int arr[n]
) недопустимы на языке C (в соответствии со стандартом). Вместо этого вы должны использовать std::vector<long long int><long long int> , что является правильной и идиоматической заменой для этого.5. Следовало бы сказать
std::max_element
, что нетstd::min_element
.
Ответ №1:
#include<iostream>
using namespace std;
void maxim(long long int *nums,long long int n){
long long int max_val=nums[0];
for(int i=1;i<n;i ){
if(nums[i]>max_val){
max_val=nums[i];
}
}
cout<<max_val<<endl;
}
int main() {
long long int n;
long long int *arr;
cin>>n;
arr = new long long int[n];
for(int i=0;i<n;i ){
cin>>arr[i];
}
maxim(arr,n);
delete []arr;
return 0;
}
Комментарии:
1. так и должно быть
maxim(arr,n);
, а неmaxim(arr[n],n);
2. Не могли бы вы уточнить, что было не так в вопросе?
3. long long int arr[n]; // это статический массив. но c не поддерживает это, и n должно быть постоянным. Необходимо использовать динамическое выделение памяти с помощью операторов new и delete.
4. В этом ответе все еще есть недостатки.
int max_val=0;
— Передаваемый тип является указателемlong long
, а неint
. Если одно из значений в массиве превышает диапазон anint
, функция завершится ошибкой. Во-вторых, это приведет к сбою, если все значения в массиве будут отрицательными.5. ты прав. Я отредактировал «int max_val = nums[0];»