野指针
**定义:**任意数值赋值给指针变量没有意义,因为这样的指针就成为了一个野指针,该指针变量指向一个未知的空间。
野指针不会直接引发错误,操作野指针指向的内存区域才会出现问题。
不建议将一个变量的在直接赋值给指针
#include<stdio.h>
int main()
{
int*p=100; \\野指针
\\操作系统0-225作为系统占用不允许访问操作
\\操作野指针对应的空间可能报错
printf("%d\n",*p);
return 0;
}
空指针
控指针是指内存地址编号为0的空间。
#include<stdio.h>
int main()
{
int*p=NULL; \\空指针
\\操作空指针对应的空间一定报错
*p=100;
printf("%d\n",*p);
\\空指针可以用作条件判断
return 0;
}
正常操作中允许野指针和空指针存在
万能指针
#include<stdio.h>
int main()
{
int a=10;
void*p=&a;\\万能指针
\\万能指针可以接收任意类型变量的内存地址
*(int*)p=100;
\\在通过万能指针修改变量的值时,需要找到变量对应的指针类型
printf("%d\n",a);
printf("%d\n",*(int*)p);
return 0;
}
输出结果:
100
100
const修饰的指针类型
**一:**const修饰指针变量
可以修改指针指向内存空间的值,不可以修改指针变量的值,
#include<stdio.h>
int main()
{
int a=10;
int b=20;
int* const p=&a;
*p=200;
printf("%d\n",a);
printf("%d\n",*p);
return 0;
}
输出结果:
200
200
**二:**const修饰指针类型
不可以修改指针指向内存空间的值,可以修改指针变量的值,
#include<stdio.h>
int main()
{
int a=10;
int b=20;
const int*p=&a;
p=&b;
printf("%d\n",a);
printf("%d\n",*p);
return 0;
}
输出结果:
10
20
const相当于一把锁,修饰谁,谁不能修改,const离谁近修饰谁。