指针
1.指针类型是一种特殊类型
DataType *name;
DataType* name;
DataType * name;
指针与普通变量的区别:
指针: 存地址
普通变量:存值
指针只能保存与其相同类型的地址
2.初始化
int *p = NULL; //ok
NULL表示空地址
int a = 3;
int *pa = &a; //ok
int *pb;
pb = &a; //ok
int *pc;
*pc = &a; //error
3.地址的访问
*:间接访问运算符;
*p
空地址不能访问里面的值
4.可以把指针变量赋值给同类型指针
5.不同类型的指针大小
64位机:8
32位机:4
6.指针的类型和指针所指向的类型
int *pa;
double *pb;
指针的类型:去掉变量名之后的部分
指针所指向的类型:去掉指针变量名和其前面的*
7.指针与数组
数组名是一个地址,
数组元素的访问:
int arr[5] = {1,2,3,4,5};
int *p = arr;
形式:
arr[0]; arr[3];
*(arr); *(arr+3);
*(pa); *(pa+3);
p[0]; p[3];
8.野指针
没有初始化,或其指向的内存被释放,而指针没有被置空;
危害:
造成系统资源的浪费,容易造成未知的致命错误。
9.指针的地址运算
指针的自增:指针向高地址方向移动
自减:指针向低地址方向移动
移动的字节数是指针所指向的类型的大小
指针相加没有意义,指针相减表示两指针的距离
指针加减一个常量,表示地址往高字节或低字节方向移动
常量值*sizeof(对应数据类型)个字节
10.概念区分
int buf[3]; //数组,大小为3,存放3个int型变量
int *pb; //指针,其类型为int*型
int *arr[3]; //指针数组
int (*pa)[3]; //数组指针,又称行指针
二级指针
DataType **PointorName;
int a = 10;
int *q = &a;
int **p = &*q;
**p == *q == a;
定义一个指针,或对地址进行操作时,一定要确定指针的指向
总结:
指针就是存储地址的单元;指针基本上跟数组名等同,理解起来有点难度,注意思维的转变,暂时我理解起来还没有什么问题,主要是对指针还不能熟练的运用,指针是C语言的灵魂,以后要注意对指针的锻炼。
网友评论