1.定义和初始化
a.直接初始化
unsigned char a;
unsigned char *p = &a;
直接定义并初始化,p表示a的地址,*p表示a
b.初始化后再赋值
unsigned char a;
unsigned char *p; //定义指针变量,
p = &a;
&表示取地址,p为a的地址;
p指向的变量 类型为unsigned char,而不是p类型为unsigned char
2.*的使用
a.乘法运算
b.定义指针变量
是定义指针变量的时候用的,比如unsigned char *p ,代表的意思是 p 是一个指针变量,而非普通的变量。
c.取值
unsigned char a = 1;
unsigned char b = 2;
unsigned char *p;
p = &a;
b = *p;
3.指向数组的指针
unsigned char number[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
unsigned char *p;
p = &number[0];那么指针 p 就指向了 number 的第 0 号元素,也就是把 number[0] 的地址赋值给了 p 。
4.指针的运算
比较
比较的前提是两个 指针指向同种类型的对象。指针指向同种类型的对象,比如两个指针变量 p 和 q。它们指向了具有同种数据类型的数组,那它们可以进行 等关系运算。如
和整数加减
如果 p = &number[0] ,那么 p+1 就指向了 number[1] ,p+9 就指向了 number[9] 。如果 p = &number[9] p - 9 也就指向了 number[0] 。
指针相减
减法的结果代表的是数组元素的个数,而不是地址的差值。
数组名代替数组首地址
p = &number[0];
p = number;
二者等价
5.二维数组
对二维数组来说, number[0] number[1] number[2] 都可以看成是一维数组的数组名字,所以 number[0] 等价于 &number[0],[ number[1] 等价于 &number[1],[ number[2] 等价于number[2][0]。
6.sizeof()
sizeof() 可以用来获取括号内的对象所占用的内存字节数;
它不是一个函数,而是 C 语言的一个关键字, sizeof() 整体在程序代码中就相当于一个常量。