В C, почему sizeof (символ) 1, когда интервала?

Я попробовал

printf("%d, %d\n", sizeof(char), sizeof('c'));

и добрался 1, 4, как произведено. Если размер символа один, почему делает 'c' дайте мне 4? Я предполагаю, что это - потому что это - целое число. Таким образом, когда я делаю char ch = 'c'; существует ли неявный случай преобразования, под капотом, от того 4-байтового значения до 1-байтового значения, когда это присвоено символьной переменной?

42
задан Wolf 14 November 2017 в 16:05
поделиться

4 ответа

В языке C 'a' - это целочисленная константа (!?!), Поэтому 4 является правильным для вашей архитектуры. Он неявно преобразуется в char для присвоения. sizeof (char) всегда равен 1 по определению. В стандарте не указано, что такое единица измерения 1, но часто это байты.

35
ответ дан 26 November 2019 в 23:56
поделиться

Согласно стандартам ANSI C, char повышается до int в контексте, где используются целые числа, вы использовали спецификатор целочисленного формата в printf отсюда и разные значения. Символ обычно составляет 1 байт, но это реализация, определяемая на основе среды выполнения и компилятора.

0
ответ дан 26 November 2019 в 23:56
поделиться

Стандарт C говорит, что символьный литерал, такой как 'a', имеет тип int, а не тип char. Поэтому он имеет (на вашей платформе) sizeof == 4. См. этот вопрос для более полного обсуждения.

7
ответ дан 26 November 2019 в 23:56
поделиться

Поскольку не существует стандартного определения отладки или выпуска, это невозможно сделать. Я могу думать по крайней мере о четырех разных вещах, которые могут быть использованы, и все они могут быть изменены независимо. Из кода можно протестировать только два.

  1. Уровень оптимизации компилятора
  2. Отладка символов, включенных в двоичный файл (их можно даже удалить позднее)
  3. assert () enabled (NDEBUG не определен)
  4. logging off
-121--2344651-

Мы также предоставляем довольно полный курс для начала работы с Telerik Silverlight

http ://www.telerik.com/support/documentation-and-tutorials/step-by-step-tutorial-for-silverlight.aspx

А также страницу, на которой можно быстро сравнить то, что мы предлагаем, с комплектом MS Toolkit и совершенно новой страницей (только что вы видели окончательную редакцию вчера вечером:D) об улучшениях производительности для комплекта Telerik, который скоро появится в прямом эфире.

В целом это зависит от ваших потребностей, как упоминалось выше, у Toolkit есть разные полосы и нет установленного цикла выпуска, плюс есть довольно надежные средства управления в нашем наборе, которые вы не найдете в инструменте. И что касается упомянутой выше документации, сообщите нам, если вы считаете, что нам не хватает в какой-либо области. У нас есть несколько сотен демонстраций за пределами программы курсов и образцов приложений на сайте, поэтому, если вы считаете, что нам нужно быть более конкретными на что-либо, дайте мне крик.

-121--3505041-

Это нормальное поведение оператора sizeof (см. Википедия ):

  • Для типа данных sizeof возвращает размер типа данных. Для символа вы получите 1.
  • Для выражения sizeof возвращает размер типа переменной или выражения. Поскольку символьный литерал набирается как int , получается 4.
5
ответ дан 26 November 2019 в 23:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: