天天看点

C语言中的指针1.定义和初始化2.*的使用3.指向数组的指针4.指针的运算5.二维数组6.sizeof()

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() 整体在程序代码中就相当于一个常量。

继续阅读