1.指针(pointer)是编程语言中的一个对象,简单来说就是将地址称作指针,就是说通过指针能找到以他为地址的内存单元;
指针其实就是一个变量,变量里面存的是地址;存放在指针变量中的值当成地址处理;
2.
32位默认指针的字节长度是4
3.不管指针是pa也好,或者是pc,在int 和char定义下的地址是一样的;
4.指针类型决定了指针进行解引用操作时,能够访问的空间大小;
int*p *p能够访问4个字节;
char*p *p能够访问1个字节;
double*p *p能够访问8个字节;
指针的类型决定了指针解引用操作时能有多大的权限(能够操作几个字节)
5.
注意:不管是pa还是pc指针,在int和char下的地址是一样的;所以第一项和第三项是一样的,但是第二项定义的是整型,第四项定义的是char;所以第二项+1,地址增加4个比特位。第四项+1,地址增加1个比特位;
6.指针类型决定了:指针走一步走多远(指针的步长)指针的类型简单来说就是:整型、字符型、双字符型等等。
7.野指针:
(指针指向的位置是不可知的=随机的、不正确的、没有明确限制的)
定义: 1.int a; 类似于这种,局部变量不初始化,默认是随机值; 局部的指针变量没有初始化;就会被定义作野指针;
2.当指针指向的范围超出数组arr的范围时,p就是野指针;
3.避免野指针:
1.指针初始化 2.小心指针越界 3.指针指向空间释放即使置NULL 4.指针使用之前检查有效性
8.为了避免野指针,给指针初始化时,实在不清楚初始化什么值;可以给指针定义空指针NULL;
即 int*p=NULL;NULL给指针赋值,用来初始化的;
9.注意:当对pa置于NULL空时,此时指针pa不再代表a的地址;
当指针有用时,我们对其进行初始化,让其代表地址;当不需要指针时,我们将其置空NULL;
10.用指针函数打印数组:(数组传过去的是首元素,打印数组中的参数时,可加可减)
11.指针-指针=指针所对应中间元素的元素个数;打印出来结果为9;
12.使用指针实现计算数组中字符个数;
13.指针的关系运算:
14.int arr[10]={0};绝 大 多 数 数组名arr就是首元素的地址;
两个例外:1. &arr--&数组名--数组名不是首元素的地址--数组名表示整个数组--&数组名--取出的是整个数组的地址; 2. sizeof(arr)--sizeof(数组名)--数组名表示整个数组--sizeof(数组名)计算的是整个数组的大小;
注意:前两个打印的都是首元素的地址;而&arr打印的是整个数组的地址:当整个数组+1时;转换进制:比特位+40;
15.指针函数中打印数组中的地址:
&arr[i]的功能和p+i所实现的功能是一样的;p为指针函数,代表首元素的地址,每次+i,代表依次打印数组中每个元素的地址;
16.以指针的形式打印数:
17.二级指针:依次类推,可以定义下述N级指针;
注意书写规范:
18.指针数组和数组指针:
指针数组--数组--存放指针的数组;数组指针--指针;
整型数组--存放整型;字符数组--存放字符;指针数组--存放指针;