HOWTO · C++
C++ でポインタが NULL かどうかを調べる
この記事では、C++ でポインタが null かどうかを調べる方法を紹介します。
この記事では、C++ でポインタが NULL かどうかを調べる方法について複数の方法を紹介します。
C++ でポインタが NULL であるかどうかを調べるために nullptr と比較する
C++ 言語にはメモリを直接操作するための複数の低レベル機能があり、メモリアドレスを指すオブジェクトである pointer の概念が指定されています。通常、ポインタは実行中のプログラムが利用するオブジェクトを指すべきです。しかし、ポインタをオブジェクトを指していないヌルポインタとして宣言することもできます。
ヌルポインタは、リテラル nullptr の値を代入するか、整数 0 を代入することで初期化されます。ただし、最近の C++ では、オーバーロードされた関数を使用した場合に望ましくない結果を招く可能性があるため、ポインタの 0 初期化は避けることが推奨されています。次の例では、ポインタが nullptr と等しくないかどうかを調べ、条件が満たされていればそのポインタを操作することができます。
#include <iostream>
using std::cout;
using std::endl;
#define SIZE 123
int main() {
char *arr = (char *)malloc(SIZE);
if (arr != nullptr) {
cout << "Valid pointer!" << endl;
} else {
cout << "NULL pointer!" << endl;
}
free(arr);
return EXIT_SUCCESS;
}
出力:
Valid pointer!
C++ でポインタが 0 との比較を使ってポインタが NULL であるかどうかを調べる
また、NULL というプリプロセッサ変数もありますが、これは C 標準ライブラリにルーツを持ち、レガシーコードでよく使われています。現代の C++ プログラミングでは、NULL を使用することは推奨されていないことを覚えておいてほしい。それでも、次のコードサンプルで示すように、0 と比較することでポインタが NULL であるかどうかを確認することができます。
#include <iostream>
using std::cout;
using std::endl;
#define SIZE 123
int main() {
char *arr = (char *)malloc(SIZE);
if (arr != 0) {
cout << "Valid pointer!" << endl;
} else {
cout << "NULL pointer!" << endl;
}
free(arr);
return EXIT_SUCCESS;
}
出力:
Valid pointer!
C++ でポインタが NULL であるかどうかを調べる条件としてポインタの値を使用する
ヌルポインタは論理式の中で使われると false として評価されます。したがって、与えられたポインタを if 文の条件に入れて、それがヌルかどうかを調べることができます。NULL ポインタを参照すると未定義の動作になり、ほとんどの場合、プログラムが異常終了してしまうことに注意してください。
#include <iostream>
using std::cout;
using std::endl;
#define SIZE 123
int main() {
char *arr = (char *)malloc(SIZE);
if (arr) {
cout << "Valid pointer!" << endl;
} else {
cout << "NULL pointer!" << endl;
}
free(arr);
return EXIT_SUCCESS;
}
出力:
Valid pointer!