Post

指针的定义

I. 指针的定义

基本指针:

1
2
3
4
int *pa;
double *pb;
char *pc;
MyClass *pm;

多个指针,即指针数组:

1
2
3
4
5
6
7
int a = 1;
int b = 2;
int c = 3;
int *pa[] = {&a, &b, &c};  // 和一般的数组一样,声明的同时初始化无需指定长度,否则需要用常量指定数组大小
cout << *pa[0] << endl;  // => 1
cout << *pa[1] << endl;  // => 2
cout << *pa[2] << endl;  // => 3

指向数组的指针:

1
2
3
4
5
6
int a[] = {1, 2, 3};
int (*p)[3] = &a;  // 指向 int [3] 数组的指针,需要用常量指定数组大小
cout << (*p)[0] << endl;  // => 1
cout << (*p)[1] << endl;  // => 2
cout << (*p)[2] << endl;  // => 2
cout << sizeof(*p) << endl;  // => 12,可以通过指针获取到原始数组的大小,sizeof 能获取到正确大小

函数指针:

定义可以看作是:把函数声明的中的函数名用括号括起来,里面再加个 *

1
2
void func(int x) {};  // 函数声明
void (*funcP)(int);   // 函数指针,通常不写参数的名称,因为这里也不会用

II. 指针和 const

指针的 const 限定

const 关键字写在类型前面:

  • 不能通过该指针修改指向的那个原始数据
  • 不能将该指针的值赋值给没有 const 限定的指针
  • 可以修改该指针的指向
1
2
int a = 3;
const int *p = &a;

const 指针

const 关键字写在指针变量名前面:

  • 不能修改指针的指向,也就是指针本身的值,因此必须在声明的同时初始化
  • 不能自增/自减
  • 指针指向的那个原始数据是不受限制的,可以修改
This post is licensed under CC BY 4.0 by the author.