指针式是存放变量的地址

1.指针类型决定了指针进行解引用操作的时候,能够访问空间的大小。 int *p; *p能够访问4个字节 char *p; *p能够访问1个字节 double *p;*p能够访问8个字节

2.指针类型决定了:指针走一步走多远(指针的步长) intp; p+1---->4 charp; p+1---->1 double*p; p+1---->8

3.野指针(需要避免) 1>指针未初始化会导致:局部变量未初始化,默认随机值 2>指针越界访问会导致. 3>指针指向的空间释放会导致.

野指针的避免: 1>指针初始化 2>小心指针越界 3>指针指向空间释放即使置NULL 4>指针使用之前检查有效性

注意: 1>当不知道给指针初始化什么值得时候, 可以赋空值:int *pa=NULL

4.指针运算

指针+-整数 指针-指针 指针的关系运算

指针-指针: 得到的是中间的元素个数 int arr[10]={1,2,3,4,5,6,7,8,9,10}; printf("%d\n",&arr[9]-&arr[0]); //结果为10

5.指针和数组(数组可以通过指针来访问)

绝大部分情况下,数组名是首元素的地址 但是: 1>&arr -&arr数组名--数组名不是首元素的地址,数组名表示整个数组--- &数组名 取出的是整个数组的地址(打印的时候首元素的首地址 == 整个元素的首地址) 2>sizeof(arr)--sizeof(数组名)---数组名表示整的数组-- sizeof(数组名) 计算的是整个数组的大小

6.二级指针

用来存放一级指针 int a =10; int pa=&a; // a的地址存放在pa中,pa是一级指针 int **ppa=&pa; // pa的地址存放在ppa中,ppa是二级指针 注意: **ppa先通过ppa找到pa,然后对pa进行解引用操作,最后找到*pa=&a

7.指针数组 // 指针数组-- 数组-- 存放指针的数组 // 数组指针-- 指针

int a=10; int b=20; int c=30; //int arr[10];--整形数组 int* arr[3]={&a,&b,&c};--整形指针数组 int i=0; for(i=0;i<3;i++) { printf("%d ",*(arr[i])); //10 20 30
}