Latest web development tutorials
×

C курс

C Язык учебника C Краткое введение C параметры окружающей среды C Структура программы C Базовый синтаксис C Типы данных C переменная C постоянная C Storage Class C операторы C судья C циркуляция C функция C Обзорное правила C массив C указатель C строка C структура C союз C поле Bit C typedef C Входной и Выходной C грамотность документов C препроцессор C заголовок C Слепки C Обработка ошибок C Рекурсия C Переменный параметр C Управление памятью C Параметры командной строки C Классические 100 случаев

C Стандартная библиотека

C Стандартная библиотека - справочное руководство C Стандартная библиотека - <assert.h> C Стандартная библиотека - <ctype.h> C Стандартная библиотека - <errno.h> C Стандартная библиотека - <float.h> C Стандартная библиотека - <limits.h> C Стандартная библиотека - <locale.h> C Стандартная библиотека - <math.h> C Стандартная библиотека - <setjmp.h> C Стандартная библиотека - <signal.h> C Стандартная библиотека - <stdarg.h> C Стандартная библиотека - <stddef.h> C Стандартная библиотека - <stdio.h> C Стандартная библиотека - <stdlib.h> C Стандартная библиотека - <string.h> C Стандартная библиотека - <time.h>

битовые поля C

Если структура программы содержит более одного цифрового только истина / ложь переменные, следующим образом:

struct
{
  unsigned int widthValidated;
  unsigned int heightValidated;
} status;

Эта конфигурация требует 8 байт памяти, но на самом деле, в каждой переменной, мы только хранить 0 или 1. В этом случае на языке С обеспечивает лучшее использование пространства памяти в пути. Если вы используете такую ​​переменную в структуре, вы можете определить ширину переменной, чтобы сообщить компилятору, что вы будете использовать только те байты. Например, указанное структура может быть переписано как:

struct
{
  unsigned int widthValidated : 1;
  unsigned int heightValidated : 1;
} status;

Теперь, Вышеописанная конструкция статус переменной занимает четыре байта памяти, но только два из них используются для хранения значений. Если вы используете 32 переменных, каждой переменной ширины одного, то структура статус будет использовать 4 байта, но больше до тех пор, пока вы используете переменную, при использовании 33 переменных, она будет находиться под участком памяти, выделенной первые 33 переменные сохраняются, это время, чтобы начать использовать 8 байт. Давайте посмотрим на следующие примеры, чтобы понять эту концепцию:

#include <stdio.h>
#include <string.h>

/* 定义简单的结构 */
struct
{
  unsigned int widthValidated;
  unsigned int heightValidated;
} status1;

/* 定义位域结构 */
struct
{
  unsigned int widthValidated : 1;
  unsigned int heightValidated : 1;
} status2;
 
int main( )
{
   printf( "Memory size occupied by status1 : %d\n", sizeof(status1));
   printf( "Memory size occupied by status2 : %d\n", sizeof(status2));

   return 0;
}

Когда приведенный выше код компилируется и выполняется, он дает следующие результаты:

Memory size occupied by status1 : 8
Memory size occupied by status2 : 4

Декларация Бит.поле

В битовом поле структура декларации выглядит следующим образом:

struct
{
  type [member_name] : width ;
};

Ниже приводится описание элемента переменного поля немного:

元素描述
type整数类型,决定了如何解释位域的值。类型可以是整型、有符号整型、无符号整型。
member_name位域的名称。
width位域中位的数量。宽度必须小于或等于指定类型的位宽度。

Переменные с предварительно определенной шириной называетсябитовым полем.Битовые поля могут хранить более одного номера, например, нужна переменная для хранения значения от 0 до 7, вы можете определить ширину трех битовых полей следующим образом:

struct
{
  unsigned int age : 3;
} Age;

Определение структуры выше направления C компилятор, возраст будет использовать только три переменные, чтобы сохранить это значение, если вы пытаетесь использовать больше трех, вы не можете завершить. Давайте посмотрим на следующие примеры:

#include <stdio.h>
#include <string.h>

struct
{
  unsigned int age : 3;
} Age;

int main( )
{
   Age.age = 4;
   printf( "Sizeof( Age ) : %d\n", sizeof(Age) );
   printf( "Age.age : %d\n", Age.age );

   Age.age = 7;
   printf( "Age.age : %d\n", Age.age );

   Age.age = 8;
   printf( "Age.age : %d\n", Age.age );

   return 0;
}

Когда приведенный выше код компилируется, он будет нести предупреждение когда приведенный выше код выполняется, он будет производить следующие результаты:

Sizeof( Age ) : 4
Age.age : 4
Age.age : 7
Age.age : 0