Looking for pointers Answers? Try Ask4KnowledgeBase
Looking for pointers Keywords? Try Ask4Keywords

pointersНачало работы с указателями


замечания

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

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

Начало работы с указателями

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

  • Идти
  • C / C ++
  • Ada
  • паскаль
  • C # (доступно при определенных ограничениях)
  • Кобол
  • FORTRAN

Чтобы начать работу с указателями на C / C ++, выполните следующие действия.

  1. Установите компилятор, как Minimalistic GNU для Windows, http://www.mingw.org/wiki/Getting_Started

  2. Перейдите в папку установки g ++ с помощью командной строки, например:

    C:\MinGW\bin>
     

3. Создайте текстовый файл и напишите эту программу на C ++.

#include <iostream>

int main () {

   int  pointed=0;
   int* ptr = & pointed;

   std::cout<<"Address of pointed variable is: "<<ptr<<std::endl;

   return 0;
}
 
  1. Сохранить как pointer.cpp 5. В командной строке запустите команду

g ++ -o pointer.exe -c pointer.cpp

  1. В рабочем каталоге вы получите исполняемый файл как pointer.exe, этот exe при запуске даст некоторый результат, например

Адрес заостренной переменной: 0x7e892dac0a0c

Если вы получаете вышеупомянутый вывод, вы написали свою первую программу указателей

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

Это в основном адрес переменной в памяти. Это позволяет косвенно получить доступ к переменной. Таким образом, используя указатели, мы можем говорить об адресе переменной (а также о ее значении путем разыменования указателя). Они полезны, когда мы хотим иметь дело с адресом памяти, а не с ее значением.

Рассмотрим следующую простую функцию подкачки в C:

void Swap(int firstVal, int secondVal)
{
 int tempVal = firstVal;
 firstVal = secondVal;
 secondVal = tempVal;
}
 

теперь в основном, если у нас есть следующий код:

.
.
int a = 9,b = 100;
swap(a,b);
//print a and b
.
.
 

Значения a и b останутся неизменными, как было бы ясно, напечатав их значения в основной функции. Чтобы реализовать функцию swap правильно, вместо передачи значений переменных a и b мы передаем адрес переменных a и b следующим образом:

swap(&a,&b);
 

Оператор & возвращает адрес переменной. Его использовали следующим образом:

int *address_of_a = &a;
 

int *address_of_a , указывает, что переменная address_of_a указывает на (сохраняет адрес) целочисленную переменную.

Теперь наша правильная функция обмена будет:

void Swap(int *firstaddress, int *secondaddress)
{
 int tempVal = *firstaddress;
 *firsaddress = *secondaddress;
 *secondaddress = tempVal;
}
 

Теперь переменные значения будут отражены в основной функции:

int a = 9,b = 100;
swap(&a,&b);
//print
 

Вы всегда можете разыменовать указатель, используя * , если у вас нет исходной переменной. Предположим, что если в функции вы не имеете исходную переменную, но имеете ее адрес в переменной указателя int *x . Мы можем просто получить доступ к значению адреса памяти как value = *x ;

Если бы у нас не было указателей, мы бы никогда не могли эмулировать pass по ссылке в C , потому что C проходит по значению . Но помните, что мы можем только эмулировать , потому что даже когда мы используем указатели, int *firstaddress, int *secondaddress - это только локальные переменные-указатели, которые имеют адрес переменных a и b .