指向指针的指针
如果一个指针指向的是另外一个指针,那么我们就称它为二级指针,或者指向指针的指针。同理可以理解多级指针,如三级指针就是指向二级指针的指针。
关系如下:
int a=100;
int *p1=&a;
Int **p2=&p1;
此时p2就是一个二级指针,它指向指针p1,在这里我们如果要取出整型变量a对应得空间中存放的数据(以printf输出为例)有以下几种方式:
printf(“%d”,a);
printf(“%d”,*p1);
printf(“%d”,**p2);
可以这样理解它们的关系:
p1=&a;
p2=&p1;
a=*p1; (1)
p1=*p2; (2)
将(1)中p1做(2)代换,易知a=**p2。
下边以一个完整的程序来示例多级指针的使用。
++++++++++指向指针的指针使用简单示例++++++++++
#include<stdio.h>
void main()
{
int m=100;
//用它本身输出
printf("%d\n",m);
//用一级指针输出
int *p1=&m;
printf("%d\n",*p1);
//用二级指针输出
int **p2=&p1;
printf("%d\n",**p2);
//用三级指针输出
int ***p3=&p2;
printf("%d\n",***p3);
}
++++++++++二级指针的简单使用++++++++++
#include<stdio.h>
void main()
{
char *mn[3]={"Hello C!","Hello word!","hello xust!"};
for(int i=0;i<3;i++)
printf("%s\n",*(mn+i));
}
++++++++++利用二级指针统计奇偶数++++++
#include<stdio.h>
void main()
{
int a[10],*p1=a2,**p2=&p1,i,n=0,m=0;
printf("请输入一串数字\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]); /* 这里的&a[i]也可以换为*p2 */
printf("输入数字中偶数有:");
for(i=0;i<10;i++)
{
if(*(*p2+i)%2==0)
{
printf("%4d",*(*p2+i));
n++;
}
}
printf(" 共计%d个\n",n);
printf("输入数字中奇数有:");
for(i=0;i<10;i++)
{
if(*(*p2+i)%2!=0)
{
printf("%4d",*(*p2+i));
m++;
}
}
printf(" 共计%d个\n",m);
}