一级指针:*p
二级指针:**p
三级指针:***p
多级指针以此类推。。。
二级指针:就是一个指向一级指针的指针
示例代码:
#include<stdio.h>
//多级指针
int main()
{
int data=10;
int *p;
p=&data;
int **p2;
p2=&p;
printf("data的地址为:%p, 值为:%d\n",&data,data);
printf("p存放data的地址为:%p\n",p);
printf("p的地址为:%p\n",&p);
printf("*p=%d\n",*p);
printf("p2存放p的地址为:%p\n",p2);
printf("*p2为:%p\n",*p2);
printf("**p2为:%d\n",**p2);
return 0;
}
运行结果
如示例代码所示:
定义了一个一级指针p指向变量data,又定义了一个二级指针p2指向一级指针p,由运行结果可知,一级指针p中存放的是变量data的地址FE14,*p可以取到data的值,二级指针p2中存放的是一级指针p的地址FE08,*p2可以取到p中存放的内容即data的地址FE14,**p2则可以取到data的值
二级指针编程小实例
代码:
#include<stdio.h>
//多级指针
void getPosByStuNum(int stuNum,int (*pscore)[4],int **p2)
{
*p2=(int *)(pscore+stuNum);//*p表示取到main函数中一级指针的地址
}
int main()
{
int scores[3][4]={
{77,88,45,67},
{45,59,78,56},
{56,78,99,87}};
int *p;
int stuNum;
puts("请输入你想查询成绩的学生学号:(0、1、2)");
scanf("%d",&stuNum);
getPosByStuNum(stuNum,scores,&p);
for(int i=0;i<4;i++)
{
printf("%d ",*p++);
}
return 0;
}
运行结果
如代码所示:在主函数中定义了一个一级指针p,将它作为参数赋给函数getPosByStuNum中的二级指针p2,此时的p2指向一级指针p,然后*p2通过函数体中的逻辑得到二维数组scores的列地址,此时主函数中的一级指针p即可通过地址偏移取出二维数组中每个一维数组的值