Ответы пользователя по тегу C
  • Что должна вернуть С функция snail на codewars?

    xorknown
    @xorknown
    Будут проблемы - решайте
    1) Возвращаемое значение функции - указатель на массив (int*)
    2) Первый параметр функции outsz - записать размер возвращаемого массива
    Ответ написан
    Комментировать
  • Как работает данный кусок кода на Си?

    xorknown
    @xorknown
    Будут проблемы - решайте
    Вам бы всё-таки к книге обратиться, а не к данному ресурсу.
    Очищать память, если имеется ввиду освобождать, надо только после выделения памяти. Если ваша программа где-либо вызывает malloc и т.п., то нужно вызывать free, не иначе.
    Динамические массивы и массивы большого размера лучше не выделять на стеке. Можно во время выполнения поймать переполнение стека. И при выделении массива помните, что память не бесконеча, и вам может ее не хватить. Опять же, если прочитать документацию, то realloc можете вызывать только после обязательного вызова malloc. Это все работа с аллокаторами, которые работают с динамической памятью.

    Максимальный размер name. Name - это указатель, в котором хранится адрес, адрес на память. В нем не хранится ни размер, ни данные о том на что он указывает, ему без разницы, он всегда будет одного размера. В вашем случае, при компиляции в программе заранее выделяется память под все текстовые данные которые указаны у вас в коде, на них и указывает указатель. Если вы захотите сохранять введённые данные, то вам придется воспользоваться выделением памяти.
    Ответ написан
    Комментировать
  • Почему компилятор ругается?

    xorknown
    @xorknown
    Будут проблемы - решайте
    По стандарту Си он вычисляется как logical-OR-expression ? expression : conditional-expression - это означает, что второй операнд может быть любым выражением(даже применять оператор ,), а третий операнд подчиняется логике приоритета и должен быть выше или равен по сравнению с тернарным оператором. В данном случае это вычисляется как ((ch == 'h') ? (high = guess) : low) = guess. Оператор ?: возвращает временное значение, и компилятор говорит об этом.
    Ответ написан
    2 комментария
  • Когда использовать malloc() или calloc()?

    xorknown
    @xorknown
    Будут проблемы - решайте
    Если кратко, то во время выполнения программы есть две области памяти в которых можно выделять память.
    Стек отличается скоростью выделения пространства для переменной, но ограничен по размерам и времени жизни самой переменной(Она уничтожается при выходе из области видимости). Следственно большие, долгоживущие объекты не всегда разумно создавать на стеке.
    Куча же наоборот, более дорогая операция по времени выделения памяти, но время жизни переменных контролируешь ты сам и места там больше в среднем. Аллокаторы(malloc, calloc и т.п.) как раз выделяют память в куче.
    Ответ написан
    Комментировать