C++ покажчики


створення покажчиків

Ви дізналися з попереднього розділу, що ми можемо отримати адресу пам'яті змінної за допомогою & оператора:

#include <iostream>
#include <string>
using namespace std;

int main() {
  string food = "Pizza";  //  food змінна типу string

  cout << food << "\n";  // виводимо значення змінної food (Pizza)
  cout << &food << "\n"; // виводимо адресу в мамяті змінної food (0x6dfed4)
  return 0;
}

// RESULT:
// Pizza
// 0x6dfed4

Покажчик є змінною , яка зберігає адресу пам'яті в якості значення .

Покажчик змінних вказує на тип даних (наприклад , int чи string ) одного і того ж типу, і створюється з * оператором. Адресі змінної з якою ви працюєте присвоюється покажчик:

#include <iostream>
#include <string>
using namespace std;

int main() {

  string food = "Pizza";  //  string змінна
  string* ptr = &food;  // Змінна вказівника, що зберігає адресу food

  cout << food << "\n";  //Виведення значення food

  cout << &food << "\n"; // Виведення адреси пам'яті food
  
  cout << ptr << "\n";   // Виведення адреси пам'яті food за допомогою вказівника
  return 0;
}

// RESULT:
// Pizza
// 0x6dfed4
// 0x6dfed4

пояснення прикладу

Створено змінну покажчика з ім'ям ptr , що вказує на string змінну використовуючи знак зірочки * ( string* ptr ). Зверніть увагу , що тип покажчика повинен відповідати типу змінної з якою ви працюєте.

Використовуйте & оператор, щоб зберегти адресу пам'яті змінної food , і призначити її до покажчика.

Тепер ptr має значення food адреси пам'яті.

Порада: Є три способи оголосити змінні - покажчики, але перший спосіб кращий:

string* mystring; // Preferred
string *mystring;
string * mystring;

Отримання адреси пам'яті і значення

У наведеному вище прикладі, ми використовували покажчик змінної, щоб отримати адресу пам'яті змінної (використовується разом з & опорним оператором). Ви також можете використовувати покажчик, щоб отримати значення змінної, за допомогою * оператора :

#include <iostream>
#include <string>
using namespace std;

int main() {
  string food = "Pizza";  // Змінна ініціалізація
  string* ptr = &food;    // Вказівник ініціалізація
  
  cout << ptr << "\n";    // Виводить адресу пам'яті food за допомогою вказівника

  cout << *ptr << "\n";   // Виводить значення вказівника за допомогою покажчика
  return 0;
}

// RESULT:
// 0x6dfed4
// Pizza

Зверніть увагу , що * знак може бути заплутаним тут, тому що робить дві різні речі в нашому коді:

  • При використанні в декларації (рядка *ptr ), він створює змінний покажчик.
  • Коли не використовується в оголошенні, він діє як оператор розіменування.

Зміна значення покажчика

Ви можете також змінити значення покажчика. Але врахуйте, що це також змінить значення вихідної змінної:

#include <iostream>
#include <string>
using namespace std;

int main() {
  string food = "Pizza";
  string* ptr = &food;

  cout << food << "\n";  // Виводимо значення food
  
  cout << &food << "\n";  // Виводимо адресу памяті food
  
  cout << *ptr << "\n"; // Доступ до адреси пам'яті food та виведення її значення
  
  *ptr = "Hamburger";   // Зміна значення вказівника
  
  cout << *ptr << "\n";  // Виводимо нове значення вказівника
  
  cout << food << "\n";  // Виводимо нове значення змінної food 
  return 0;
}


// RESULT:
// Pizza
// 0x6dfed4
// Pizza
// Hamburger
// Hamburger 

 


Наш партнер:
beta test mp3 playlist downloader