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

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

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

  • название
  • автор
  • субъект
  • Книга ID

Определение структуры

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

struct [structure tag]
{
   member definition;
   member definition;
   ...
   member definition;
} [one or more structure variables];  

тег структуры не является обязательным, каждое определение является членом стандартное определение переменной, такой как INT I, или поплавок п, или другие действительные определения переменных.В конце структуры, определенной, последним перед точкой с запятой, вы можете указать один или несколько структурных переменных, которые не является обязательным. Вот структура декларации Бронировать по:

struct Books
{
   char  title[50];
   char  author[50];
   char  subject[100];
   int   book_id;
} book;  

Доступ к члену структуры

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

#include <stdio.h>
#include <string.h>
 
struct Books
{
   char  title[50];
   char  author[50];
   char  subject[100];
   int   book_id;
};
 
int main( )
{
   struct Books Book1;        /* 声明 Book1,类型为 Book */
   struct Books Book2;        /* 声明 Book2,类型为 Book */
 
   /* Book1 详述 */
   strcpy( Book1.title, "C Programming");
   strcpy( Book1.author, "Nuha Ali"); 
   strcpy( Book1.subject, "C Programming Tutorial");
   Book1.book_id = 6495407;

   /* Book2 详述 */
   strcpy( Book2.title, "Telecom Billing");
   strcpy( Book2.author, "Zara Ali");
   strcpy( Book2.subject, "Telecom Billing Tutorial");
   Book2.book_id = 6495700;
 
   /* 输出 Book1 信息 */
   printf( "Book 1 title : %s\n", Book1.title);
   printf( "Book 1 author : %s\n", Book1.author);
   printf( "Book 1 subject : %s\n", Book1.subject);
   printf( "Book 1 book_id : %d\n", Book1.book_id);

   /* 输出 Book2 信息 */
   printf( "Book 2 title : %s\n", Book2.title);
   printf( "Book 2 author : %s\n", Book2.author);
   printf( "Book 2 subject : %s\n", Book2.subject);
   printf( "Book 2 book_id : %d\n", Book2.book_id);

   return 0;
}

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

Book 1 title : C Programming
Book 1 author : Nuha Ali
Book 1 subject : C Programming Tutorial
Book 1 book_id : 6495407
Book 2 title : Telecom Billing
Book 2 author : Zara Ali
Book 2 subject : Telecom Billing Tutorial
Book 2 book_id : 6495700

Структура в качестве параметра функции

Вы можете поместить структуру в качестве параметра функции, порядок Сената подобно другим типам переменных или указателей. Вы можете использовать приведенный выше пример, как получить доступ к переменным структуры:

#include <stdio.h>
#include <string.h>
 
struct Books
{
   char  title[50];
   char  author[50];
   char  subject[100];
   int   book_id;
};

/* 函数声明 */
void printBook( struct Books book );
int main( )
{
   struct Books Book1;        /* 声明 Book1,类型为 Book */
   struct Books Book2;        /* 声明 Book2,类型为 Book */
 
   /* Book1 详述 */
   strcpy( Book1.title, "C Programming");
   strcpy( Book1.author, "Nuha Ali"); 
   strcpy( Book1.subject, "C Programming Tutorial");
   Book1.book_id = 6495407;

   /* Book2 详述 */
   strcpy( Book2.title, "Telecom Billing");
   strcpy( Book2.author, "Zara Ali");
   strcpy( Book2.subject, "Telecom Billing Tutorial");
   Book2.book_id = 6495700;
 
   /* 输出 Book1 信息 */
   printBook( Book1 );

   /* 输出 Book2 信息 */
   printBook( Book2 );

   return 0;
}
void printBook( struct Books book )
{
   printf( "Book title : %s\n", book.title);
   printf( "Book author : %s\n", book.author);
   printf( "Book subject : %s\n", book.subject);
   printf( "Book book_id : %d\n", book.book_id);
}

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

Book title : C Programming
Book author : Nuha Ali
Book subject : C Programming Tutorial
Book book_id : 6495407
Book title : Telecom Billing
Book author : Zara Ali
Book subject : Telecom Billing Tutorial
Book book_id : 6495700

Указатель на структуру

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

struct Books *struct_pointer;

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

struct_pointer = &Book1;

Чтобы использовать указатель на доступ к точкам элемент структуры к структуре, вы должны использовать оператор ->, следующим образом:

struct_pointer->title;

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

#include <stdio.h>
#include <string.h>
 
struct Books
{
   char  title[50];
   char  author[50];
   char  subject[100];
   int   book_id;
};

/* 函数声明 */
void printBook( struct Books *book );
int main( )
{
   struct Books Book1;        /* 声明 Book1,类型为 Book */
   struct Books Book2;        /* 声明 Book2,类型为 Book */
 
   /* Book1 详述 */
   strcpy( Book1.title, "C Programming");
   strcpy( Book1.author, "Nuha Ali"); 
   strcpy( Book1.subject, "C Programming Tutorial");
   Book1.book_id = 6495407;

   /* Book2 详述 */
   strcpy( Book2.title, "Telecom Billing");
   strcpy( Book2.author, "Zara Ali");
   strcpy( Book2.subject, "Telecom Billing Tutorial");
   Book2.book_id = 6495700;
 
   /* 通过传 Book1 的地址来输出 Book1 信息 */
   printBook( &Book1 );

   /* 通过传 Book2 的地址来输出 Book2 信息 */
   printBook( &Book2 );

   return 0;
}
void printBook( struct Books *book )
{
   printf( "Book title : %s\n", book->title);
   printf( "Book author : %s\n", book->author);
   printf( "Book subject : %s\n", book->subject);
   printf( "Book book_id : %d\n", book->book_id);
}

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

Book title : C Programming
Book author : Nuha Ali
Book subject : C Programming Tutorial
Book book_id : 6495407
Book title : Telecom Billing
Book author : Zara Ali
Book subject : Telecom Billing Tutorial
Book book_id : 6495700

поле Bit

Некоторая информация хранится и не нужно брать полный байт, а составляет только один или несколько битов. Например, при хранении переключатель, только два состояния 0 и 1, с двоичным битом. Для экономии места хранения, и процесс прост, язык C и обеспечивает структуру данных, называемую "битовое поле" или "битном сегменте."

Так называемое "битовое поле" один байт в двоичном виде разделенной на несколько различных областей, и указывают число битов в каждом регионе. Каждый домен имеет доменное имя, что позволяет программе работать в соответствии с именем домена. Таким образом, мы можем поставить несколько различных объектов с байт двоичного битового поля для представления.

Типичные примеры:

  • При хранении переключатель с бинарным, только два состояния 0 и 1.
  • Читайте внешние форматы файлов - можно считывать нестандартные форматы файлов. Например: 9-битное целое число.

Описание Определяет битовых полей переменных и битового поля

Определения битов поля и определения структуры, аналогичные форме:

    struct 位域结构名
        { 位域列表 };

Какая форма бит список полей:

    类型说明符 位域名: 位域长度 

Например:

struct bs{
    int a:8;
    int b:2;
    int c:6;
};

Таким же способом, описанным битовое переменные и переменные структуры, описанной. Может использоваться после того, как первое определение описывает и определяет инструкции либо непосредственно проиллюстрировать это тремя способами. Например:

struct bs{
    int a:8;
    int b:2;
    int c:6;
}data;

Описание для Bs переменных данных, в общей сложности два байта. На долю которых приходилось 8 битового поля немного поле Ъ приходилось две, что составляет 6 битового поля с.

Давайте посмотрим на пример:

struct packed_struct {
  unsigned int f1:1;
  unsigned int f2:1;
  unsigned int f3:1;
  unsigned int f4:1;
  unsigned int type:4;
  unsigned int my_int:9;
} pack;

Здесь packed_struct состоит из шести членов: четыре 1-битный идентификатор f1..f4, тип 4-битный и 9-битный my_int.

Для определения битового поля имеются следующие инструкции:

  • Битовое поле должно быть сохранено в одном байте, не охватывают два байта. Такие, как, когда байт не хватает места осталось для хранения другой домен, должен быть следующий блок памяти из битового поля. Он также может намеренно Пересмотрены домен из следующего блока. Например:

    struct bs{
        unsigned a:4;
        unsigned  :4;    /* 空域 */
        unsigned b:4;    /* 从下一单元开始存放 */
        unsigned c:4
    }
    

    В этом определении бит поле, четыре бита первого байта после четырех сказали, что они не использовали для заполнения 0, б из второго байта, занимая 4, в занимает четыре.

  • Так как битовое поле не допускается по двум байтами, так что длина битового поля не может быть больше, чем один байт длины, то есть не более чем 8 двоичными. Если максимальная длина больше, чем по всей длине машинного слова, некоторые компиляторы могут позволить перекрытие памяти область, и некоторые компиляторы могут поместить больше части домена для хранения следующего слова.
  • Битовые поля могут быть неназванным битовое поле, то оно используется только в качестве заливки или положения регулировки. Без имени битовое поле не может быть использован. Например:

    struct k{
        int a:1;
        int  :2;    /* 该 2 位不能使用 */
        int b:3;
        int c:2;
    };
    

Как видно из приведенного выше анализа, бит поля является по существу тип структуры, но ее члены двоичным распределением.

Использование битовых полей

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

    位域变量名·位域名

Бит.поле позволяет различные форматы.

Рассмотрим следующие примеры:

main(){
    struct bs{
        unsigned a:1;
        unsigned b:3;
        unsigned c:4;
    } bit,*pbit;
    bit.a=1;	/* 给位域赋值(应注意赋值不能超过该位域的允许范围) */
    bit.b=7;	/* 给位域赋值(应注意赋值不能超过该位域的允许范围) */
    bit.c=15;	/* 给位域赋值(应注意赋值不能超过该位域的允许范围) */
    printf("%d,%d,%d\n",bit.a,bit.b,bit.c);	/* 以整型量格式输出三个域的内容 */
    pbit=&bit;	/* 把位域变量 bit 的地址送给指针变量 pbit */
    pbit->a=0;	/* 用指针方式给位域 a 重新赋值,赋为 0 */
    pbit->b&=3;	/* 使用了复合的位运算符 "&=",相当于:pbit->b=pbit->b&3,位域 b 中原有值为 7,与 3 作按位与运算的结果为 3(111&011=011,十进制值为 3) */
    pbit->c|=1;	/* 使用了复合位运算符"|=",相当于:pbit->c=pbit->c|1,其结果为 15 */
    printf("%d,%d,%d\n",pbit->a,pbit->b,pbit->c);	/* 用指针方式输出了这三个域的值 */
}

Пример программы определяет бит поля структура бс, три бита поля а, Ь, с. Описание типа переменной битовой базовой станции и указательные бс указатель типа переменной PBIT. Это представляет собой битовое поле могут быть также использованы указатели.