指针 (pointer)#
指针是一种对象, 它储存 对应类型对象 或 函数 的地址值, 被指针存储了地址值的对象或函数称为 指针指向的对象或函数.
1int value; // 声明之后, 使用 &value 能够获取对象的地址
2int* pointer = &value; // pointer 存储了 value 的地址, 于是指向 value
通过该地址值, 指针能够访问指向的对象或函数.
1int value;
2int* pointer = &value;
3
4*pointer = 3; // 通过指针访问对象, 使得 value = 3
通过修改指针存储的地址值, 指针能够切换指向的对象或函数.
1int value;
2int* pointer = &value;
3
4int another;
5pointer = &another; // pointer 现在存储 another 的地址, 于是指向 another
交叉内容#
指针与 const
#
const
不仅可以作用于指针对象本身, 也可作用于指针指向的对象.
1int value = 0;
2int* const pointer = &value; // const 向左作用于 *; 指针本身不可改变, 即不可切换指向的对象
3
4/* 修改指向的 int 对象 */
5*pointer = 1; // 正确
6
7/* 切换指向的对象 */
8int another_value = 0;
9pointer = &another_value; // 错误: 该指针不可切换指向的对象
1int value = 0;
2int const* pointer = &value; // const 向左作用于 int; 指针指向的 int 对象不可改变
3
4/* 修改指向的 int 对象 */
5*pointer = 1; // 错误: 该指针指向的 int 对象不可改变
6
7/* 切换指向的对象 */
8int another_value = 0;
9pointer = &another_value; // 正确
函数指针 (function pointer)#
顾名思义是指向函数的 指针, 由于其声明方式比较复杂, 特此单独列出.
对于形如 int do_something(int, double)
的函数, 其指针为 int (*pointer)(int, double)
.
它可以同函数一样调用.
1int do_something(int, double);
2
3int (*pointer)(int, double) = &do_something;
4pointer(1, 1.0); // 函数指针本身就可以被调用
5(*pointer)(1, 1.0); // 解引用后得到的函数也可以被调用
自然, 如果没被 const
限定, 则它可以切换指向的函数.