一维数组:
1.二维数组
行下标
指针
######1指针类型是一种特殊类型
DataType *name;
DataType* name;
DataType * name
DataType :数据类型
指针只能保存相同类型的地址
*:
name:变量名
指针和普通变量的区别:
指针 存地址
普通变量 存值
int *p: 只能保存int型地址
char *pc: 只能保存char型地址
double *pd: 只能保存double型地址
2初始化
int *p = NULL //ok
int a=3;
int *p = &a;
int *pb;
pb = &a;
int *pc;
*pc = &a; //error
3地址的访问
*:间接访问运算符
int *pb;
pb=&a; //ok
变量名 变量地址 存储
a 0x000012 10
pb 0x000034 0x000012
*pb:取指针对应内存里面的值
4可以把指针变量赋值给同类型指针
5不同类型的指针的大小
64位机 8
32位机 4
6指针的类型和指针所指向的类型
int *pa;
int* pa;
double *pd;
指针的类型:
去掉变量名之后的部分
指针所指向的类型:
去掉指针变量名和其前面的*
7指针与数组
数组名表示一个地址,
数组元素的访问
int arr[5] = {12,3,4,5};
int *pa = arr;
arr[0]; arr[3];
*(arr); *(arr+3);
*(pa); *(pa+3);
pa[0]; pa[3];
8野指针
没有初始化,或者其指向的内存被释放,而指针没有被置空;
危害:搞地质
造成系统资源的浪费,容易造成未知的致命错误。
9指针地址的运算
自增:指针向高地址方向移动
自减:指针向低地址方向移动
移动的字节数是指针所指向的类型的大小
指针相减,表示两个指针之间的距离
指针相加没意义
指针加减一个常量,表示地址往高字节或低字节方向移动
常量值*sizeof(对应数据类型)个字节
(10)概念区分三个
int buf[3]
//数组,大小为3,存放三个int型变量
int *pb
//指针 其类型为int型指针
int *arr[3]
//指针数组
int (*pa)[3];
//指针数组
int (*pa)[3];
//数组指针,又称行指针
int (*)[] pa;
二级指针
DataType **PointorName;
int a = 10;
int *q = &a;
int **p = &q;
*
//定义一个指针,或对地址进行操作,一定要确定指针的指向!!