指针: 指针是语言的灵魂
地址
介绍指针前先给解释一下地址:
是内存单元的编号(内存可以被CPU访问,硬盘不可以被CPU访问,硬盘的数据要是想被CPU访问那就把数据导入到内存中)
地址是从零开始ide非负数:范围:0--FFFFFFFF
这里给大家举个例子:
double* p;
double a;//因为a是double类似数据 所以占8个字节,一个字节有8位,一个字节是一个地址
p=&a;// p里面存放的是a中8个字节的首地址
指针
地址就是指针,指针就是地址;
指针变量是存放内存单元地址的变量;
指针本质是一个操作受限的非负整数
int *p;
int a = 5;
p = a;
在这个简单代码中,你可以判断一下是否错误,如果没有错误,p应该什么?
答案是:这是一个错误代码,因为:int* p;//p是变量的名字,int *表示p变量只能存储int 类型变量的地址。而当p没有指向是,他里面存放的是一个垃圾值,指向一个未知的地址
分类
1. 基本类型的指针
2. 指针和数组
arr[5]={1,2,3,4,5}
在这个数组中arr是指向第一个数据的首地址,arr[1] 相当于*(arr+1); 本质上:arr[i] 等价于*(arr+i) 所以:arr[3]==3[arr];
内存
在32位操作系统下,指针是占4个字节空间大小
在64位下,占8个字节大小
空指针
指针变量指向内存中编号为0的空间,用来初始化指针,空指针指向的内存是不可以访问的,是不可以访问的 原因:0--255编号的指针是系统占用的,不可以访问。
野指针
指针变量指向非法的空间:
const修饰指针
const修饰指针—常量指针 只能改变指针方向 不能改变指针值
const int * p = &a ; p =&b;(对) *p =3;(错)
const修饰常量—常量指针 只能改变指针值,不能改变指针方向
int * const p=&a;*p =5434;(对) p = &b错
const即修饰指针又修饰常量, 指针值和指针方向都不可以改变
const int * const p=&a; *p= 232;错 p=&b 错