В этом разделе приведен обзор того, какие указатели и почему разработчик может захотеть его использовать.
Следует также упомянуть о любых крупных предметах в указателях и ссылки на соответствующие темы. Поскольку документация для указателей является новой, вам может потребоваться создать начальные версии этих связанных тем.
Указатели - это переменные, которые хранят адрес другой переменной. В качестве языковой функции они доступны на нескольких языках программирования, таких как, но не только:
Чтобы начать работу с указателями на C / C ++, выполните следующие действия.
Установите компилятор, как Minimalistic GNU для Windows, http://www.mingw.org/wiki/Getting_Started
Перейдите в папку установки 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;
}
g ++ -o pointer.exe -c pointer.cpp
Адрес заостренной переменной: 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
.