多级指针的定义
- 把一个指向指针变量的指针变量叫做多级指针变量
- 对于指向处理数据的指针变量称为一级指针变量,简称一级指针
- 而把指向一级指针变量的指针变量称为二级指针变量,简称二级指针
- 二级指针的说明形式如下:
-
- <存储类型><数据类型>**<指针名>;
指针的运算
多级指针的运算
- 指针变量+1,是向地址大的方向移动一个目标数据。类似的道理,多级指针的运算也是以其目标变量为单位进行偏移。
- 比如:in **p;p+1;移动一个int *变量所占的内存空间。再比如int ***p,p+1移动一个int **所占的内存空间。
综合例程:
#include<stdio.h>
int main (void)
{
int m = 10;
int *p;
int ** q;
p = &m;
q = &p;
printf("%p %p %p %p %p\n",&m,p,q,&p,&q);
/*获取int型m的地址,指针变量p所指向的地址,指针变量q所指向的地址,
指针变量p本身的地址以及指针变脸q本身的地址。*/
printf("%d %d %d\n",m,*p,**q);
/*以三种形式打印变量m的值*/
printf("%d %d %d\n",m+1,*p+1,**q+1);
/*以三种方式打印变量m+1后的值*/
return 0;
}
运行结果:
0x7ffd36fee364 0x7ffd36fee364 0x7ffd36fee368 0x7ffd36fee368 0x7ffd36fee370
10 10 10
11 11 11
多级指针与指针数组
- 指针数组也可以用另外一个指针来处理。
- 例如:有一个一维字符指针数组parr[5];
- char *parr[5] = {“Beijing city”,······“London city”};
例:数字数组指针与多级指针的应用
#include<stdio.h>
int main (void)
{
int arr[] ={2,44,566,10};
int *p[4];//定义一个指针数组
int ** q = 0; //定义一个二级指针变量
p[0] = &arr[0];
p[1] = &arr[3];
q = p;//q = &arr[0]
//使用数组指针,二级指针打印数组数字2和数字10的地址
printf("%p %p %p %p\n",&arr[0],p[0],&p[0],q);
printf("%p %p %p %p\n",&arr[3],p[1],&p[1],q+1);
//使用数组指针,二级指针打印数组的第一个和第四个元素的内容
printf("%d %d %d\n",arr[0],*p[0],**q);
printf("%d %d %d\n",arr[3],*p[1],**(q+1));
return 0;
}
运行结果:
0x7ffc6dede590 0x7ffc6dede590 0x7ffc6dede5a0 0x7ffc6dede5a0
0x7ffc6dede59c 0x7ffc6dede59c 0x7ffc6dede5a8 0x7ffc6dede5a8
2 2 2
10 10 10
例:字符指针数字与多级指针的应用
#include<stdio.h>
int main (void)
{
char *str[] ={"How","are","you","!"};
char **p;
int i = 0,n;
n = sizeof(str)/sizeof(char *);//计算字符指针中元素的个数
p = &str[0];//也可写成p = str;
while(i<n)
{
//循环打印字符指针的内容
printf("%s ",str[i]);
printf("%s ",*(p+i));
i++;
puts("");
}
return 0;
}
运行结果:
How How
are are
you you
! !