1、指向变量的指针与指向数组的指针区别
 
指针初始化区别
对普通变量
对数组
int a;
int *p = &a;
int a[8];
int *p = a;
int a;
int *p;
p = &a;
int a;
int *p;
p = a;
 
2、指针类型与指针所指类型区别
 
 
指针类型
指针所指类型
 
去掉指针名剩下部分
去掉 *和指针名后剩下部分
int *p
int *
int
int **p
int **
int *
int (*p)[8]
int (*)[8]
int ( )[8]
int *p[8]
int *[8]
int [8]
int *(*p)[8]
int *(*)[8]
int *( )[8]
void *p
void(空类型)
不指向任何类型
 
3、数组与指针区别
 
int a[20];
 int *p = a;
求地址
求内容(值)
a = (a+0) = &a[0] = (p+0) = &p[0]
a[0] = *(a+0) = p[0] = *(p+0) = *p
(a+1) = &a[1] = (p+0) = &p[1]
a[1] = *(a+1) = p[1] = *(p+1)
(a+i) = &a[i] = (p+i) = &p[i]
a[i] = *(a+i) = p[i] = *(p+i)
 
4、指针运算几种形式区别
int a[10] = {1, 3, 5, 7, 9, 11 } ;
int * p = a ;
原型
1
2
p变否
备注
p++
先取p所指地址
p
再指向数组下个元素地址
p+1
p值改变
不能写成a++
先求&a[0]
 
求地址
再指向a[1],结果为&a[1]
结果为地址
*p++
先取p所指内容(值)
*p
再指向数组下个元素
p+1
p值改变
不能写成*a++
先求a[0]
 
求值
再指向a[1],结果为&a[1]
结果为地址
(*p)++
先取p所指内容(值)
*p
再将该值加1
*p+1
p值不变
可以写成(*a)++
先求a[0]
 
求值
再将a[0]内容加上1,即为1+12
结果为值