C ライブラリマクロ -NULL
説明
C ライブラリマクロNULLはヌルポインタ定数の値です。
NULLはヌルポインタ定数を表すマクロです。通常は次のように定義されます。((void*)0)メモリアドレス 0 を指すヌルポインタを表します。- C++ では、
NULLは次のように定義される場合があります。0或0L整数との0比較を可能にするためです。
宣言
以下はコンパイラに依存する NULL マクロの宣言です。
#define NULL ((char *)0) 或 #define NULL 0L 或 #define NULL 0
パラメータ
- NA
戻り値
- NA
用法
NULLポインタが有効なオブジェクトやアドレスを指していないことを示すために使用されます。例えば、動的メモリ割り当てが失敗した場合、通常はNULL。NULLまた、ポインタ変数の初期化にも使用され、現在有効なアドレスを指していないことを示します。
例
以下の例は NULL マクロの用法を示しています。
例 1
#include <stddef.h>
#include <stdio.h>
int main ()
{
FILE *fp;
fp = fopen("file.txt", "r");
if( fp != NULL )
{
printf("ファイル file.txt を正常に開きました\n");
fclose(fp);
}
fp = fopen("nofile.txt", "r");
if( fp == NULL )
{
printf("ファイル nofile.txt を開けません\n");
}
return(0);
}
#include <stdio.h>
int main ()
{
FILE *fp;
fp = fopen("file.txt", "r");
if( fp != NULL )
{
printf("ファイル file.txt を正常に開きました\n");
fclose(fp);
}
fp = fopen("nofile.txt", "r");
if( fp == NULL )
{
printf("ファイル nofile.txt を開けません\n");
}
return(0);
}
ファイルfile.txtは存在しますが、nofile.txtは存在しません。上記のプログラムをコンパイルして実行すると、次の結果が得られます。
成功打开文件 file.txt 不能打开文件 nofile.txt
動的メモリ割り当て:
例
#include <stdio.h>
#include <stdlib.h>
int main() {
int *ptr = (int*)malloc(sizeof(int) * 10);
if (ptr == NULL) {
printf("Memory allocation failed\n");
return 1;
}
// 割り当てたメモリを使用
for (int i = 0; i < 10; i++) {
ptr[i] = i;
}
// 割り当てたメモリを解放
free(ptr);
ptr = NULL; // ポインタを NULL に設定
return 0;
}
#include <stdlib.h>
int main() {
int *ptr = (int*)malloc(sizeof(int) * 10);
if (ptr == NULL) {
printf("Memory allocation failed\n");
return 1;
}
// 割り当てたメモリを使用
for (int i = 0; i < 10; i++) {
ptr[i] = i;
}
// 割り当てたメモリを解放
free(ptr);
ptr = NULL; // ポインタを NULL に設定
return 0;
}
関数パラメータ:
例
#include <stdio.h>
#include <string.h>
void printString(const char *str) {
if (str == NULL) {
printf("String is NULL\n");
} else {
printf("String: %s\n", str);
}
}
int main() {
char *string1 = "Hello, World!";
char *string2 = NULL;
printString(string1); // 出力: String: Hello, World!
printString(string2); // 出力: String is NULL
return 0;
}
#include <string.h>
void printString(const char *str) {
if (str == NULL) {
printf("String is NULL\n");
} else {
printf("String: %s\n", str);
}
}
int main() {
char *string1 = "Hello, World!";
char *string2 = NULL;
printString(string1); // 出力: String: Hello, World!
printString(string2); // 出力: String is NULL
return 0;
}
注意事項
NULLはヌルポインタを表す標準的な方法であり、直接0或(void*)0を使用するのを避け、コードの可読性と保守性を高めます。- ポインタを比較する場合は、
NULLを直接使用するのではなく、 を使用します。0。 - C++ では、
nullptrの代わりにNULLを使用すると、より強力な型チェックが提供されます。
関連情報
- C++11 標準では、
nullptrキーワードが、より型安全なヌルポインタ定数として導入されました。 NULLマクロの定義はコンパイラや標準ライブラリの実装によって多少異なる場合がありますが、その意味と用途は同じです。
C 標準ライブラリ - <stddef.h>