一、指针是什么?
在计算机科学中,指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向(points to)存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的称为“指针”。意思是通过它能找到以它为地址的内存单元。
二、指针和指针类型
char *pc = NULL;
int *pi = NULL;
short *ps = NULL;
long *pl = NULL;
float *pf = NULL;
double *pd = NULL;
这里可以看到,指针的定义方式是: type + 。其实: char* 类型的指针是为了存放 char 类型变量的地址。 short* 类型的指针是为了存放 short 类型变量的地址。 int* 类型的指针是为了存放int 类型变量的地址。
1.指针±整数
对指针±代表+或-类型的大小。
2.指针的解引用
对指针解引用代表指针能访问sizeof(type)个字节。
总结: 指针的类型决定了,对指针解引用的时候有多大的权限(能操作几个字节)。 比如: char* 的指针解引用就只能访问一个字节,而 int* 的指针的解引用就能访问四个字节。
三、野指针
野指针: 野指针就是指针指向的位置是不可知的(随机的、不正确的、没有明确限制的)
成因:
1.指针未初始化
2.指针指向的空间释放
四、指针运算
1.指针-指针
两个指针相减代表指针之间所经历元素个数。(元素:有参与计算的指针说了算)。
2.指针关系运算
实际在绝大部分的编译器上是可以顺利完成任务的,然而我们还是应该避免这样写,因为标准并不保证它可行。
标准规定:
允许指向数组元素的指针与指向数组最后一个元素后面的那个内存位置的指针比较,但是不允许与指向第一个元素之前的那个内存位置的指针进行比较。
所以,第3份代码不推荐。
五、指针和数组
指针和数组没有任何关系。但是指针和数组的用法非常类似,可以相互转化。
其中有一点是在数组传参时数组降维成指针,很可能是为了减少计算次数,提高计算机的效率。由此以来,C语言的指针和数组很多语法都很像,为了使人更方便地去了解和使用。