引入
好吧,看到这个标题我是崩溃的,指针要指向数据,现在还有一个指针指向了指向数据的指针….
我们把这种指向指针数据的指针
变量,称为指向指针的指针
。
绕一绕
1 | char *name[]={"Book_a","Book_b","Book_c","Book_d"}; |
这是一个指针数组,数组元素存放的是后面字符串的首元素地址
1 | char *name[]={"Book_a","Book_b","Book_c","Book_d"}; |
name+i
是一个指针,指向的是 name[i]name[i]
这个数组元素存放的是一个指针,所以:name+i
是指向指针的指针。
定义指向指针的指针
1 | char *p; |
我们知道 运算是从右向左结合的
**p
表示 ` ( p )char p
是一个指针变量,指向字符的指针 p
char **p `,表示指向指针 p 的指针。
例1
1 |
|
执行结果
3977
Book_a
*p+1
表示的是 Book_b 的首字母地址*p
表示的是 Book_a 的首字母地址,输出的为 Book_a
。
例2
1 |
|
执行结果
Book_a
Book_b
Book_c
Book_d
从上面的例子我们就能知道:
1 | p=name; //此时 p 表示的是 name 的地址,也是 name[0]的地址 |
也就是说:
p 是 name 这个数组的地址
*p 是 name 这个数组元素的值,这个值是一个地址
**p 是 name 这个数组元素的值的地址对应的值。
例3
有一个整型数组,用一个指针数组指向了这个整型数组,我们用指针数组来输出这个整型数组的值。
1 |
|
运行结果
2
4
6
8
10
注意
指针数组只能存放地址,不能存放别的。
尾巴
这是我的个人学习笔记,主要是应付考研复习使用,充斥着一些吐槽和个人观点,并不严谨,欢迎大家参考、指正。