指针
(pointer) 是一个
值
为
内存地址
的
变量
。
1、定义 指针
(1)
int *p = &a; 定义指针变量 p, *p 与 a 相同
*p = 10; 指针p所指向的变量, 即a
(2)
&*p 与 &a 相同, 是地址
*&a 与 a 相同, 是变量
(3)
(*p)++ 等价于 a++, 将 p 所指向的变量值加1
*p++ 等价于 *(p++), 先取 *p,然后 p 自加1, 此时p不再指向a
创建一个指针时,系统只分配了储存指针本身的内存,并未分配储存数据的内存。
2、NULL 指针
在变量声明的时候,如果没有确切的地址可以赋值,把指针变量赋值NULL
是一个良好的编程习惯。值为 NULL 的指针被称为空指针
。
NULL指针
是一个定义在标准库
中的值为0
的常量。
3、void 指针
4、间接运算符 *
假设已知 ptr 指向 bah,如下所示:
ptr = &bah;
使用间接运算符*
( indirection operator ) 找出储存在bah中的值,该运算符有时也称为解引用运算符
( dereferencing operator )。
千万不要解引用
未初始化的指针。
5、指针操作
(1)递增指针、递减指针
(2)指针 减去一个整数
(3)指针求差:两个相同类型的指针相减,表示它们之间相隔的数组元素的个数
#include <stdio.h>
int main()
{
int a[2], *p, *q;
p = a;
q = p + 1;
printf("%d\n", q - p); //1, 指针p和q之间元素的个数.
printf("%d\n", (int)q - (int)p);//4, 指针p和q之间的字节数, (int)q是地址值.
return 0;
}
(4)p < q:两个相同类型指针可以用 关系运算符 比较大小
(5)其他操作都是 非法 的:指针相加、相乘和相除,或指针加上和减去一个浮点数