Каков размер символов в C и C ++? Насколько я знаю, размер символа составляет 1 байт в C и C ++.
#include <stdio.h>
int main()
{
printf("Size of char : %d\n", sizeof(char));
return 0;
}
#include <iostream>
int main()
{
std::cout << "Size of char : " << sizeof(char) << "\n";
return 0;
}
Не удивительно, они оба дают вывод: Size of char : 1
Теперь мы знаем , что персонажи представлены в виде 'a'
, 'b'
, 'c'
, '|'
, ... Так что я просто изменил вышеуказанные коды к этим:
В С:
#include <stdio.h>
int main()
{
char a = 'a';
printf("Size of char : %d\n", sizeof(a));
printf("Size of char : %d\n", sizeof('a'));
return 0;
}
Size of char : 1
Size of char : 4
В C ++:
#include <iostream>
int main()
{
char a = 'a';
std::cout << "Size of char : " << sizeof(a) << "\n";
std::cout << "Size of char : " << sizeof('a') << "\n";
return 0;
}
Size of char : 1
Size of char : 1
Почему sizeof('a')
возвращает разные значения в C и C ++?
"%|"
Формат требуетint
аргумента (или что - то , что способствуетint
).sizeof
дает результат типаsize_t
. Либо преобразуйте вint
использование приведения, либо, если ваша реализация это поддерживает, используйте"%zu"
.Ответы:
В C тип символьной константы, такой как
'a'
фактическиint
, имеет размер 4 (или другое значение, зависящее от реализации). В C ++ тип имеетchar
размер 1. Это одно из многих небольших различий между двумя языками.источник
int
наchar
, что объясняет поведение. :)Как сказал Пол, это потому, что
'a'
онint
в C, аchar
в C ++.Я освещаю эту конкретную разницу между C и C ++ в том, что написал несколько лет назад по адресу: http://david.tribble.com/text/cdiffs.htm.
источник
В C тип символьных литералов int и char в C ++. Это в C ++ требуется для поддержки перегрузки функций . Смотрите этот пример:
Вывод:
источник
В языке C символьный литерал не является
char
типом. C рассматривает символьный литерал как целое число. Таким образом, нет разницы междуsizeof('a')
иsizeof(1)
.Таким образом, размер буквенного символа равен размеру целого числа в C.
В языке C ++ символьный литерал является типом
char
. Cppreference Сэя:Итак, в C ++ символьный литерал является типом
char
. Итак, размер символьного литерала в C ++ составляет один байт.Alos, в ваших программах вы использовали неверный спецификатор формата для
sizeof
оператора.C11 §7.21.6.1 (P9):
Таким образом, вы должны использовать
%zu
спецификатор формата вместо%d
, иначе это неопределенное поведение в C.источник
%zu
не поддерживается на многих платформах, но лучшая переносимость, использование(int)sizeof(char)
и форматирование%d
char
является ли тип подписанным или неподписанным по умолчанию.