1,未初始化的指针
创建一个指针,但没有赋值。
#include <stdio.h>
int main() {
int *a;
*a = 3;
return 0;
}
效果:编译器会报错。
2,操作数组,指针超过了数组长度
指针,但是越界了。
长度为3,却操作了第五个地址。
#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,代表空指针。
#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。
赋值空,判空,都是比较常用的做法。