指针的定义
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.