1、初期化されていないポインタ
ポインタが作成されますが、値は割り当てられません。
#include <stdio.h>
int main() {
int *a;
*a = 3;
return 0;
}
効果:コンパイラーはエラーを報告します。
2.配列を操作します。ポインタが配列の長さを超えています
ポインタですが、範囲外です。
長さは3ですが、5番目のアドレスが動作します。
#include <stdio.h>
int main() {
int a[] = {
1, 2, 3};
int *b = a;
*(b + 4) = 6;
printf("%d\n", *(b + 4));
return 0;
}
効果:エラーを報告します。
3.ポインターは存在しますが、データは残っています
#include <stdio.h>
int *abc() {
int a = 3;
return &a;
}
int main() {
int *a = abc();
*a = 4;
printf("%d\n", *a);
return 0;
}
効果:エラーを報告します。
4.ヌルポインタ
ポインタにNULLを割り当てて、NULLポインタを表すことができます。
#include <stdio.h>
int main() {
int *a = NULL;
printf("%d\n", a == NULL);
int b = 3;
a = &b;
printf("%d\n", a == NULL);
return 0;
}
効果:
最初はNULLであり、割り当て後はNULLではなくなります。
nullの割り当てとnullの判断は、より一般的な方法です。