@Slavon7

Неправильный вывод?

Когда я вывожу максимальный элемент - выводит число 9 (что не есть верным) Через дебагер тоже пробовал: всё равно число 9; раньше работало, а через время перестало; кто сможет найти ошибку, буду очень благодарен.

int main()
{
    const int N = 10; ///Константа, кол-во єлєментів
    int max = 0; /// Змінна 
    int a,b,e = 0; /// Змінні 
    int c = 0;/// Змінна 
    
    int s[10] = {1,5,6,1,2,6,6,2,4,3};

    int *ptr = s;
    

    for(int *ptr = s[0];ptr <= N;ptr++){ /// Цикл перерахунку масива 
        if(ptr > max){ /// Находження максимальног єлємента
            max = ptr;/// Присвоення
        }
    }
    printf("%d", max);
}
  • Вопрос задан
  • 146 просмотров
Решения вопроса 2
@res2001
Developer, ex-admin
Вы не правильно инициализируете указатель ptr: int *ptr = s[0];
Обращение s[0] просто возвращает первый элемент массива (в вашем случае 1). Это не указатель.
Правильная запись была бы:
int *ptr = &s[0];
или
int *ptr = s;


Если бы вы поставили максимальный уровень сообщений компилятора, то в этом месте он бы вам ругнулся.
В целом рекомендую в своих проектах всегда выставлять максимальный уровень сообщений и исправлять ошибки, на которые указывает компилятор. В большинстве случаев компилятор выдает абсолютно правильные рекомендации. Конечно бывают и исключения.
Ответ написан
Комментировать
RiseOfDeath
@RiseOfDeath
Диванный эксперт.
for(int *ptr = s[0];ptr <= N;ptr++)


Что с чем вы сравниваете в условии?

Десятый элемент находится по адресу s + N, а не N
Тут же сравнение адреса (который почти всегда сильно больше десяти) с числом. Наверное все-таки как-то так:
for(int *ptr = s; ptr-s <= N; ptr++)
или
for(int *ptr = s; ptr <= s+N; ptr++)

Ну и плюс еще ошибка на которую вам Дмитрий указал

Плюс у вас бесполезная строка int *ptr = s;
Зачем вы объявляете переменную ptr, которая больше нигде не используется? (зато в цикле вы объявляете еще одну переменную с таким же именем, которая не та же самая переменная, что объявлено раньше)

К тому же почему вы считаете ответ 9 не верным? Ваш код выводит максимальное значение, это именно 9.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@dmtrrr
Backend developer
1) зачем использовать указатель? можно же без него
2)
for(int *ptr = s; ptr <= N; ptr++){ /// Цикл перерахунку масива 
        if(*ptr > max){ /// Находження максимальног єлємента
            max = *ptr;/// Присвоення
        }
    }
Ответ написан
profesor08
@profesor08
максимальный элемент 9
for(int *ptr = s; ptr != s + N; ptr++) {
        if(*ptr > max) {
            max = *ptr;
        }
    }


последний элемент 3 - *(s + (N - 1))
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы