1
指针相关概念
在C语言程序中,任何野指针或越界的数组下标都可能使系统崩溃
两次释放内存也可能会导致这种结果
指针的算术运算也只能在一个特定的数组中进行。实际上,这并不是一种限制,因为指针的算术运算只有在一个数组中进行才有意义。对指针的算术运算来说,一个数组并不是一个数组变量
2指针变量
系统为指针分配内存空间
指针有自己的地址
指针能够存值,但这个值比较特殊-----地址
学习指针要注意两点
1:指针的类型
把指针声明语句里的指针名去掉
2:指针所指向的类型
只需把指针声明语句里的指针名和名字左边的指针声明符“*”去掉
3指针的值
指针的值也叫指针所指向的内存区或地址
指针的值是指针本身存储的值
我们所说一个指针的值是XX,就相当说该指针指向了以XX为首地址的一片内存区域,我们所说的一个指针指向了某块内存区域,就相当于说该指针的值是这块内存区域的首地址
指针的值的位数和32/64位系统有关
4指针的运算
1.指针的算术运算
指针+-整数
2.只针的关系运算
< <= > >=
3.间接引用
对于已经说明的变量来说,变量名就是对变量值的直接引用。
对于指向变量或内存中任何对象的指针来说,指针就是对对象值的直接引用
假如P是一个指针,P的值就是其对象的地址:*P表示使间接引用运算符作用于P,*P值就是P所指向的对象的值
4最多使用几层指针
答案是至少可以有12层
5常量指针和指针常量
常量指针指向的内容不可变,但地址可以变,即指针可以指向别的地址。
而指针常量是指指针本身不可变,而内容可以修改
要注意:
1:如果指针常量指向的是字符指针变量,那么当修改*P时,编译时可以通过,但运行时出错,因为他试图修改常量去的内容
2:当指针常量指向宁外一个指针时,当这个指针指向别的内容时,那么指针常量还是指向原来的值
6.空指针及其应用
有时候,在程序中需要使用这样一种指针,它并不指向任何对象,这种指针被称为空指针,、
空指针的值是NULL,NULL是在"stdio.h"中定义的一个宏,它的值和任何有效指针的值都不同。
指针的值不能是整形值,但空指针是个例外,即空指针的值可以是一个纯粹的0。
空指针的用法:
1用空指针终止对递归数据结构的间接引用,递归是指一个事物由它本身来定义
2用空指针进行函数调用失败的返回值。
3用空指针做警戒值。
7指针void:万能指针
void指针一般被称为通用指针或泛指针,它是C语言关于“纯粹地址”的一种约定,void指针指向某个对象,但该对象不属于任何类型
例:
int *p;
void *P;
IP指向一个整形值,而P指向的对象不属于任何类型
8指针数组与数组指针