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 для распределения и управления памятью обеспечивает несколько функций. Эти функции могут быть найдены в заголовочном файле<stdlib.h>.

序号函数和描述
1void *calloc(int num, int size);
该函数分配一个带有num个元素的数组,每个元素的大小为size字节。
2void free(void *address);
该函数释放 address 所指向的h内存块。
3void *malloc(int num);
该函数分配一个num字节的数组,并把它们进行初始化。
4void *realloc(void *address, int newsize);
该函数重新分配内存,把内存扩展到newsize

Динамическое распределение памяти

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

char name[100];

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

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

int main()
{
   char name[100];
   char *description;

   strcpy(name, "Zara Ali");

   /* 动态分配内存 */
   description = malloc( 200 * sizeof(char) );
   if( description == NULL )
   {
      fprintf(stderr, "Error - unable to allocate required memory\n");
   }
   else
   {
      strcpy( description, "Zara ali a DPS student in class 10th");
   }
   printf("Name = %s\n", name );
   printf("Description: %s\n", description );
}

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

Name = Zara Ali
Description: Zara ali a DPS student in class 10th

Выше программа также может использоватьcalloc () для записи, просто нужно заменить таНос calloc, как показано ниже:

calloc(200, sizeof(char));

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

Повторно настроить размер памяти и свободной памяти

При выходе из программы, операционная система автоматически освобождает всю память , выделенную на программу, тем не менее, рекомендуем вам не нужна память, вы должны вызвать функциюбесплатно () , чтобы освободить память.

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

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

int main()
{
   char name[100];
   char *description;

   strcpy(name, "Zara Ali");

   /* 动态分配内存 */
   description = malloc( 30 * sizeof(char) );
   if( description == NULL )
   {
      fprintf(stderr, "Error - unable to allocate required memory\n");
   }
   else
   {
      strcpy( description, "Zara ali a DPS student.");
   }
   /* 假设您想要存储更大的描述信息 */
   description = realloc( description, 100 * sizeof(char) );
   if( description == NULL )
   {
      fprintf(stderr, "Error - unable to allocate required memory\n");
   }
   else
   {
      strcat( description, "She is in class 10th");
   }
   
   printf("Name = %s\n", name );
   printf("Description: %s\n", description );

   /* 使用 free() 函数释放内存 */
   free(description);
}

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

Name = Zara Ali
Description: Zara ali a DPS student.She is in class 10th

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