指针:
①指针是地址
②指针变量用来存放地址
#include<stdio.h>
int main()
{
int a=10; //a在内存中要分配空间--4个字节
printf("%p\n",&a); //%p专门用来打印地址的,打印a的地址
int *pa=&a; //pa是用来存放地址的,&a(表示取a的地址,&是取址符)
//*说明pa是指针变量
//int说明pa执行的对象是int类型的
*pa=20; //*解引用操作 | *pa就是通过pa里边的地址,找到a
printf("%p\n",pa); //打印pa的地址
printf("%d\n",a);
return 0;
}
输出结果:
1、指针类型决定了:指针解引用的权限多大
2、指针类型决定了:指针向前或向后走一步有多大(距离)
//整形指针+1 相当于跳过四个字节
//字符指针+1 相当于跳过一个字节
指针的大小:
32位编译器
指针需要多大的空间,取决于地址的存储需要多大空间
32位 32 bit-->4 byte
64位 64 bit-->8 byte
野指针
概念:野指针是指针指向的位置是不可知的(随机的、不正确的、没有明确限制的)
野指针成因
1、指针未初始化
2、指针越界访问
3、指针指向的内存释放
避免野指针方法:指针要么是空指针要么就是指向有效的地址
二级指针