• Почему char занимает 1 байт, а строка с одним символом - 2 байта?

    Djaler
    @Djaler
    Сеньор-помидор
    Все правильно, этот 1 байт занимает символ конца строки '\0'
    Ответ написан
    Комментировать
  • Почему char занимает 1 байт, а строка с одним символом - 2 байта?

    @redakoc
    Существует 2 типа строк:

    Типа С.
    Тип Паскаль.

    К языкам это не имеет отношения: язык Паскаль может использовать строки типа С, язык С может использовать строки типа Паскаль. Название просто исторически возникло, т.к. изначально в С и Паскале были только одного вида строки (разные, такие как описано ниже).

    Строка типа С - это массив байтов, заканчивающийся нулем. То есть строка не может содержать символ с кодом 0 (не числом 0, а символ с кодом 0, нулевой байт). Длина строки всегда = количество символов + 1 байт (с нулевым кодом) в конце строки.

    Строка типа Паскаль в начале хранит 1 байт, указывающий длину строки, затем идет массив символов. Строка может содержать внутри себя символы с кодом 0. Но не может быть длиннее 255 байт. В памяти такая строка занимает те же что и С = число символов в строке + 1 байт в начале, хранящий её длину.

    А еще есть строки UNICODE, UTF8, строки типа Паскаль, где длина указана 2-мя байтами (т.е. максимальная длина 65535 символов в строке).

    Длина таких строк в байтах может быть очень и очень разной. Совсем не соответствующей числу символов. Разница будет не на 1 байт (как в простых строках типа С и типа Паскаль). Более того, например, в UTF8 длина строки в байтах будет зависеть от того, что именно написано. )))

    В наше время я настоятельно рекомендую изучать не простые char, а обратить внимание именно на UNICODE.
    А там вовсе не один байт на один символ. )))))
    Ответ написан
    41 комментарий
  • Как сделать циклический сдвиг массива на 4 вправо?

    Zoominger
    @Zoominger
    System Integrator
    Суперидиотский метод:
    for(int k=0; k<4; k++){
       int t;
       t = a[n-1];
       for (int i = n-2; i>=0; i--)
       {
           a[i+1] = a[i];
       }
       a[0] = t;
    }
    Ответ написан
    1 комментарий