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, есть некоторые задачи, такие как динамическое распределение памяти, не указатель не имеет законной силы. Итак, я хочу, чтобы стать хорошим программистом на С, обучения указатели необходимы.

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

#include <stdio.h>

int main ()
{
   int  var1;
   char var2[10];

   printf("var1 变量的地址: %x\n", &var1  );
   printf("var2 变量的地址: %x\n", &var2  );

   return 0;
}

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

var1 变量的地址: bff5a400
var2 变量的地址: bff5a3f6

В качестве примера выше, мы понимаем, что адреса памяти и как получить к нему доступ. Давайте посмотрим на то, что является указателем.

Что такое указатель?

Указатель является переменной, значение которого является адрес другой переменной, а именно прямой адрес ячейки памяти.Перед тем, Как и другие переменные или константы, вы должны использовать адрес указателя памяти других переменных, она объявлена. Общая форма декларации переменной указателя:

type *var-name;

Здесь тип представляет собой указатель на базовый тип, он должен быть,VAR-имя действительный Cтипданных имя переменной - указателя. Используется, чтобы объявить указатель звездочка * умножение использовать звездочку одно и то же. Тем не менее, в этом заявлении, звездочка используется для указания переменной является указателем. Ниже приводится действительная декларация указателя:

int    *ip;    /* 一个整型的指针 */
double *dp;    /* 一个 double 型的指针 */
float  *fp;    /* 一个浮点型的指针 */
char   *ch     /* 一个字符型的指针 */

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

Как использовать указатель?

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

#include <stdio.h>

int main ()
{
   int  var = 20;   /* 实际变量的声明 */
   int  *ip;        /* 指针变量的声明 */

   ip = &var;  /* 在指针变量中存储 var 的地址 */

   printf("Address of var variable: %x\n", &var  );

   /* 在指针变量中存储的地址 */
   printf("Address stored in ip variable: %x\n", ip );

   /* 使用指针访问值 */
   printf("Value of *ip variable: %d\n", *ip );

   return 0;
}

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

Address of var variable: bffd8b3c
Address stored in ip variable: bffd8b3c
Value of *ip variable: 20

Указатель C NULL

Во время объявления переменных, если не точный адрес может быть назначен, присвоить значение NULL для переменной указателя является хорошей практикой программирования. Значение указателя NULL Fu называетсянулевым указателем.

Указатель NULL определен в стандартной библиотеке нулевых констант. Рассмотрим следующую программу:

#include <stdio.h>

int main ()
{
   int  *ptr = NULL;

   printf("ptr 的值是 %x\n", ptr  );
 
   return 0;
}

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

ptr 的值是 0

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

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

if(ptr)     /* 如果 p 非空,则完成 */
if(!ptr)    /* 如果 p 为空,则完成 */

Указатель C Подробный

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

概念描述
指针的算术运算 可以对指针进行四种算术运算:++、--、+、-
指针数组 可以定义用来存储指针的数组。
指向指针的指针 C 允许指向指针的指针。
传递指针给函数 通过引用或地址传递参数,使传递的参数在调用函数中被改变。
从函数返回指针 C 允许函数返回指针到局部变量、静态变量和动态内存分配。