nullptr C++ значение для нулевого указателя

nullptr указывает на пустой указатель, не указывающий ни на какой объект.

Также как и nullptr можно использовать NULL и 0.


#include <iostream> // cout, endl
#include <iomanip>  // boolalpha
using namespace std;
int main(){
    cout << boolalpha;  // Для вывода логических значений в виде true и false, а не 1 и 0
    int* p = nullptr;   // Присваиваем указателю значение nullptr
    cout << (p == nullptr) << endl; //true p - нулевой указатель
    cout << (p == NULL) << endl;    //true
    cout << (p == 0) << endl;       //true

    int a = 10; // Создали переменную тип int
    p = &a;     // Присвоили указателю p адрес переменной a

    cout << (p == nullptr) << endl; //false p - не нулевой указатель
    cout << (p == NULL) << endl;    //false
    cout << (p == 0) << endl;       //false
}

Для указания нулевого указателя рекомендуется использовать именно nullptr являющийся значением указателя и компилятор это понимает, а не NULL являющийся макросом на ноль (обычно) и не 0 являющийся целочисленным значением.


#include <iostream> // cout, endl
using namespace std;

void print_type(int* p){   // Функция принимает указатель
    cout << "pointer = " << p << endl;  // Выводим что вызвана функция с указателем и его значение
}

void print_type(int p){   // Перегрузка функции print_type() принимающая int
    cout << "value = " << p << endl;    // Выводим что вызвана функция со значением его значение
}

int main(){
    int* p1 = nullptr;  // Присваиваем указателю значение nullptr
    int* p2 = NULL;     // Присваиваем указателю значение NULL
    int* p3 = 0;        // Присваиваем указателю значение 0
    
    print_type(p1);     //pointer = 0
    print_type(p2);     //pointer = 0
    print_type(p3);     //pointer = 0
    
    cout << endl;       // Выведем разделитель
    
    print_type(nullptr);//pointer = 0
    //print_type(NULL); // Выводит ошибку но где-то пишут что вызвалась бы функция со значением (value = 0)
    print_type(0);      //value = 0    Видим что вызвалась функция со значением,так что 0 != nullptr
}
2023-10-22



Понравилась страница?
Добавить в закладки
Или поделиться!

Связанные темы

alignas спецификатор выравнивания данных в памяти С++
alignof оператор С++11 возвращает количество байт требуемых для выравнивания типа данных
nullptr C++ значение для нулевого указателя
Стек и куча в С++