指针 (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;  // 错误: 该指针不可切换指向的对象

函数指针 (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 限定, 则它可以切换指向的函数.

相关解答#