比较容易搞混的是指针数组数组指针


指针数组,顾名思义,存放指针的数组。

如果不理解可以思考一下其它类型的数组,比如

  • 字符数组
  • 整数数组
  • 浮点数数组

看到这些,就明白指针数组是个什么玩意了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//字符数组
char a[3];

//整数数组
int b[3];

//浮点数数组
float c[3];

//指针数组
int *d1[3]; //整数指针数组 <=> (int*) d1[3];
char *d2[3]; //字符指针数组 <=> (char*) d2[3];
float *d3[3]; //浮点数指针数组 <=> (float*) d3[3];
//以上数组中存储的是相关类型的指针
int *d1[3] = {&a[0], &a[1], &a[2]}; //虽然没意义,但整数数组也可以用int初始化
char *d2[3] = {"afbg", "234dfs", "fdsf"};
float *d3[3] = {&c[0], &c[1], &c[2]};

数组指针,指向数组的指针。

先想想别的什么指针,整数指针、字符串指针、浮点数指针、类指针,然后想到数组指针,是不是突然明白了什么?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
//整数指针
int *a;

//字符指针
char *b;

//浮点数指针
float *c;

//类指针
Student *d;

//数组指针
int (*p1)[3]; //整数数组指针 指针指向有三个整数的数组
char (*p2)[3]; //字符数组指针 指针指向有三个字符的数组
float (*p3)[3]; //浮点数数组指针 指针指向有三个浮点数的数组
Student (*p4)[3]; //类数组指针 指针指向有三个Student对象的数组
//指针赋值
int v1[3];
p1 = &v1;

char v2[3];
p2 = &v2;

float v3[3];
p3 = &v3;

Student v4[3];
p4 = &v4;