C++ でポインタが NULL かどうかを調べる
胡金庫
2023年10月12日
-
C++ でポインタが
NULL
であるかどうかを調べるためにnullptr
と比較する -
C++ でポインタが
0
との比較を使ってポインタが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!
著者: 胡金庫