多级指针的基本用法
多级指针
把一个指向指针变量的指针变量,称作多级指针变量
对于指向处理数据的指针变量称为一级指针变量
指向一级指针变量的指针变量称为二级指针变量
二级指针变量的说明形式如下:<数据类型> * *<指针名>;

#include <stdio.h>
int main() {
int a = 10;
int * p = &a;
int * * q = &p;
printf("%d %p %p\n",a,p,q);
printf("%p %p %p\n",&a,&p,&q);
printf("%ld %ld %ld\n",sizeof(a),sizeof(p),sizeof(q));
printf("%d %d %d\n",a,*p,**q);
return 0;
}
/*
10 000000000062FE1C 000000000062FE10
000000000062FE1C 000000000062FE10 000000000062FE08
4 8 8
10 10 10
*/多级指针的运算
指针变量加一,是向地址大的方向移动一个目标数据
多级指针运算也是以其目标变量为单位进行偏移
int*p; p+1移动一个int 变量所占的内存空间
int**p; p+1移动一个int * 变量所占的内存空间
int***p; p+1移动一个int ** 变量所占的内存空间
#include <stdio.h>
int main() {
int a = 10;
int * p = &a;
int * * q = &p;
printf("int*: %p %p\n",p,p+1);
printf("int**: %p %p\n",q,q+1);
return 0;
}
/*
int*: 000000000062FE14 000000000062FE18 //移动4个字节
int**: 000000000062FE08 000000000062FE10 //移动8个字节 (16进制 08+8=10)
*/#include <stdio.h>
int main() {
int a[] = {4,6,9,10,20};
int *p[5];
int n = sizeof(a) / sizeof(int);
int i;
int **q;
for (i = 0;i < n;i++){
p[i] = &a[i];
}
for (i = 0;i < n;i++){
printf("%d %d\n",a[i],*p[i]);
}
q = p; //&p[0]
printf("四种方式取a[1]:%d %d %d %d\n",a[1],*p[1],**(q +1),*q[1]);
return 0;
}
/*
4 4
6 6
9 9
10 10
20 20
四种方式取a[1]:6 6 6 6
*/多级指针和指针数组
指针数组也可以用另外一个指针来处理
#include <stdio.h>
int main() {
char *s[5] = {"apple","pear","peach","orange","banana"};
char **p = s;//&s[0]
printf("%s\n",s[1]);
printf("%s\n",*(p + 1));
p++;
printf("%s\n",*p);
return 0;
}
/*
pear
pear
*/