У цьому посібнику ми дізнаємося про порожні вказівники та як ними користуватися за допомогою прикладів.
Перш ніж продовжити цей підручник, обов’язково перевірте вказівники на C ++.
У C ++ ми не можемо призначити адресу змінної одного типу даних покажчику іншого типу даних. Розглянемо цей приклад:
// pointer is of int type int *ptr; // variable is of double type double d = 9.0; // Error // can't assign double* to int* ptr = &d;
Тут сталася помилка, оскільки адреса є double
змінною типу. Однак покажчик має int
тип.
У таких ситуаціях ми можемо використовувати покажчик на void (void pointers) у C ++. Наприклад,
// void pointer void *ptr; double d = 9.0; // valid code ptr = &d;
Недійсним покажчик являє собою загальний покажчик , який використовується , коли ми не знаємо , тип даних змінної , яка вказує покажчик на.
Приклад 1: C ++ Void Pointer
#include using namespace std; int main() ( void* ptr; float f = 2.3f; // assign float address to void ptr = &f; cout << &f << endl; cout << ptr << endl; return 0; )
Вихідні дані
0xffd117ac 0xffd117ac
Тут покажчику ptr
присвоюється значення &f
.
Результат показує, що покажчик порожнечі ptr зберігає адресу float
змінної f.
Як void
і порожній тип, порожні покажчики не можна розменовувати.
void* ptr; float* fptr; float f = 2.3; // assign float address to void pointer ptr = &f; cout << *ptr << endl; // Error // assign float address to float pointer fptr = &f; cout << *fptr << endl; // Valid
Приклад 2: Друк вмісту покажчика Void
Для друку вмісту покажчика void ми використовуємо static_cast
оператор. Він перетворює покажчик із void*
типу на відповідний тип даних адреси, яку зберігає вказівник:
#include using namespace std; int main() ( void* ptr; float f = 2.3f; // assign float address to void pointer ptr = &f; cout << "The content of pointer is "; // use type casting to print pointer content cout << *(static_cast(ptr)); return 0; )
Вихідні дані
Зміст покажчика - 2,3
Ця програма друкує значення адреси, на яку void
вказує вказівник ptr.
Оскільки ми не можемо розмежувати void
покажчик, ми не можемо використовувати його *ptr
.
Однак, якщо ми перетворимо void*
тип вказівника на float*
тип, ми можемо використовувати значення, на яке вказує void
вказівник.
У цьому прикладі ми використовували static_cast
оператор для перетворення типу даних покажчика з void*
на float*
.
Кастинг у стилі С
Ми також можемо використовувати лиття в стилі С для друку значення.
// valid cout << *((float*)ptr);
Однак static_cast
перевагу віддається кастингу в стилі С.
Примітка: порожні покажчики не можна використовувати для зберігання адрес змінних з const
або volatile
кваліфікаторів.
void *ptr; const double d = 9.0; // Error: invalid conversion from const void* to void* ptr = &d;