Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Язык C

C — указатели

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

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

Живая демонстрация
#include <stdio.h>

int main () {

   int  var1;
   char var2[10];

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

   return 0;
}

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

Address of var1 variable: bff5a400
Address of var2 variable: bff5a3f6

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

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

type *var-name;

Здесь введите является базовым типом указателя; это должен быть допустимый тип данных C и имя-переменной имя переменной-указателя. Звездочка *, используемая для объявления указателя, — это та же звездочка, что и для умножения. Однако в этом утверждении звездочка используется для обозначения переменной как указателя. Взгляните на некоторые допустимые объявления указателей —

int    *ip;    /* pointer to an integer */
double *dp;    /* pointer to a double */
float  *fp;    /* pointer to a float */
char   *ch     /* pointer to a character */

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

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

Есть несколько важных операций, которые мы будем делать с помощью указателей очень часто. (а) Мы определяем переменную-указатель, (b) присвоить адрес переменной указателю и (c) наконец, получить доступ к значению по адресу, доступному в переменной-указателе. Это делается с помощью унарного оператора * которая возвращает значение переменной, расположенной по адресу, указанному ее операндом. В следующем примере используются эти операции —

Живая демонстрация
#include <stdio.h>

int main () {

   int  var = 20;   /* actual variable declaration */
   int  *ip;        /* pointer variable declaration */

   ip = &var;  /* store address of var in pointer variable*/

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

   /* address stored in pointer variable */
   printf("Address stored in ip variable: %x\n", ip );

   /* access the value using the pointer */
   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

Нулевые указатели

Всегда рекомендуется присваивать значение NULL переменной-указателю, если у вас нет точного адреса, который нужно назначить. Это делается во время объявления переменной. Указатель, которому присвоено значение NULL, называется null. указатель.

Указатель NULL — это константа с нулевым значением, определенная в нескольких стандартных библиотеках. Рассмотрим следующую программу —

Живая демонстрация
#include <stdio.h>

int main () {

   int  *ptr = NULL;

   printf("The value of ptr is : %x\n", ptr  );
 
   return 0;
}

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

The value of ptr is 0

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

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

if(ptr)     /* succeeds if p is not null */
if(!ptr)    /* succeeds if p is null */

Указатели в деталях

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

Серийный номер Концепция и описание
1 Арифметика указателя

В указателях можно использовать четыре арифметических оператора:++, --, +, -

2 Массив указателей

Вы можете определить массивы для хранения нескольких указателей.

3 Указатель на указатель

C позволяет вам иметь указатель на указатель и так далее.

4 Передача указателей на функции в C

Передача аргумента по ссылке или по адресу позволяет вызываемой функции изменить переданный аргумент в вызывающей функции.

5 Указатель возврата из функций в C

C позволяет функции возвращать указатель на локальную переменную, статическую переменную и динамически выделенную память.


Язык C

  1. C Переменные, константы и литералы
  2. Класс хранения C
  3. C указатели
  4. Связь между массивами и указателями
  5. C Pass адреса и указатели
  6. C-структуры и указатели
  7. Глобальное ключевое слово Python
  8. Указатели C++ с примерами
  9. C Переменная, типы данных, константы
  10. Указатели в C:что такое указатели в программировании на C? Типы